728x90

리눅스 공부하면서... 이해한걸 또 까먹을까봐 내식대로 적어두려함

 

출처는 학교 리눅스 수업 + 모두를 위한 리눅스 프로그래밍(아오키 미네로, 2018) 이다.

 

컴퓨터는 기본적으로 1차원 바이너리를 읽는다.

따라서 모든 데이터는 1차원으로 바뀌어서 흐른다... 이것을 스트림이라고 할 수 있다.

 

프로세스가 하나 생성되면 해당 프로세스에 3개의 스트림이 자동으로 생성되는데,

이것이 표준입력, 표준출력, 표준에러출력이다.

이들은 각각 0,1,2 의 디스크립터(ID같은것?)를 갖는다. 그치만 그걸 유저에게 외우라고 하진않고....!

STDIN_FILENO, STDOUT_FILENO , STDERR_FILENO 라고 매크로를 지정하여뒀으니 이걸 넣어서 인자로 주고받을수있다

 

이것은 컴퓨터의 중요한 개념인 추상화(abstraction)를 내포하고있는데

내 프로세스는 이 표준입력이 파일에서 온건지 키보드로 친건지는 신경쓰지 않고 똑같이 처리할 수 있다.

표준 출력을 내보낼 때도 마찬가지다. 이걸 모니터에 쓰든 다른 프로세스로 전달하든 알바가 아닌것이당......

 

암튼 이 스트림들을 우리는 수많은 입출력이 포함 된 API 를 통해 간접적으로 쓰고있지만

시스템콜로 직접 호출하려면

unistd.h 헤더를 포함하고, read, write를 사용하면 된다.

write 를 쓰려면

문자열(char []) buf 를 선언하고(당연 변수명은 달라도 됨)

write(STDOUT_FILENO, buf, sizedof(Buf)-1);

 

위와같이 하면 된다.

 

buf는 우리가 흔히 '버퍼링 걸린다' 고 할때의 버퍼인데 (이말도 안쓴지 10년넘긴한듯...) 암튼....

저렇게 하면 buf 에 들어있는 문자열이 표준출력으로 나온다! ( 터미널에 찍힘 ) 파이프로 연결해서 다른데로 보낼수도있다..

 

 

해당내용은 위에 언급한 책 64~71 페이지를 읽어보면 더 자세하고 정확하게 나온당......끗!

728x90
728x90
더보기

안드로이드 / Android Developement / 액티비티 생명주기  / Activity Life cycle / 뷰모델 / View Model / 로깅 / Logging / SaveInstanceState / SIS

 

실무에 바로 적용하는 안드로이드 프로그래밍 4판 (제이펍, 크리스틴 마시캐노 외) 책의 리뷰입니다...
(개인 공부 목적으로 작성)

 

3장은 액티비티 생명주기를 다루고

화면 회전(onPause ) 에서 데이터가 초기화되는 문제와,

생명주기 콜백 함수를 호출하지 않고 종료되는 경우에 데이터 저장을 위해 SIS를 사용하는 방법을 배웠다

 

1. 뷰모델

뫄뫄ViewMolde.kt << ViewMoldel class 상속 형태로 만든다.

특정 액티비티화면과 연결되고,

해당 화면에 올라갈 간단한 데이터를 형상화 하는 로직을 두기 좋다.

예제 앱에서는 문제 리스트와 다음 문제로 넘어가는 함수등을 두었다.

androidx.lifecycle 패키지의 일부이다.

소멸 시 onCleared() 호출

액티비티의 onCreate 내부에 프로바이더를 이용해서 인스턴스화 한다.

액티비티가 새로 생성되어도 뷰모델은 유지되다가 Destroy 시 같이 사라진다.

그러므로 뷰 모델은 액티비티를 참조하면 안 됨

 

2. 생명주기

액티비티의 상태이다.

나의 언어로(?) 다시 정리하자면

상태는 크게 4가지로

없음 / 만들어졌으나 화면에 안보이는중 / 화면에 일부또는 전체 보이지만 상호작용x / 젤위에서 상호작용 중

이렇게 있고

각 함수가 호출되어 상태가 바뀔 때 어떤 처리를 해줄지 override 해줄 수 있다.

super 써주어서 미리 다 구현된걸 편하게 가져다 쓴다.....

귀...귀찮아

공식문서 히히

https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko

 

활동 수명 주기에 관한 이해  |  Android 개발자  |  Android Developers

활동은 사용자가 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기와 같은 작업을 하기 위해 상호작용할 수 있는 화면을 제공하는 애플리케이션 구성요소입니다. 각 활동에는 사용자 인터페

developer.android.com

 

3. onSaveInstanceState

액티비티, 프로세스 소멸 시에도 데이터를 저장하는 수단...

Bundle 이라는 객체에 키-값 쌍의 데이터들을 저장한다.

onPause 에서 자동으로 호출되어 번들에 정보를 저장하고 액티비티가 새로 생성될 때 Bundle?에서 저장된 값을 가져와 다시 셋팅할수있다.

액티비티 정상 종료시나 기기 재부팅시에 폐기된다.

 

뷰모델과 SIS는 얼핏 용도가 비슷해보이지만 앞으로 다른 쓰임을 갖는다고 한다..

lifecycle-viewmodel-savedstate 라이브러리가 배포되었다고 하니..알고있으면 좋겟지만 지금은 책을 끝내는걸 먼저 해야지 하하....

뭐 일단 안쓰더라도 공부한것이 안드로이드를 이해하는데 도움이 된다.

실은 이 챕터를 서너번 읽으면서 약한 코틀린 문법 부분도 보강되는것 같다....

 

언제쯤 코딩해서 밥벌어먹을수있으려낭

 

728x90
728x90

2장은 MVC패턴을 아주 간단히 구현해본다.

 

44페이지의 모델-뷰-컨트롤러 설명이 간단하고 큰 도움이 되었다.

모델 - 데이터, 비즈니스 로직

뷰 - 화면에 보이는 것, 사용자 입력에 응답하는 객체

컨트롤러 - 뷰와 모델을 이어줌(뷰와 모델은 서로 통신하지 않는다), 애플리케이션 로직 포함, Activity, 보통 Fragment 의 Subclass

 

간단한 트리비아 앱을 만드는데

나는 점심메뉴 고르기 앱으로 약간 변경해보고자한다.

 

암튼... 예제와 내 앱은 아직 액티비티가 하나밖에 없는 간단한 앱이다.

 

문제와 답을 저장할 Question.kt 라는 데이터클래스를 구현하는데 이것이 모델(데이터 이므로)에 해당하고

뷰는 activity_main.xml

컨트롤러는 MainActivity.kr 파일에 해당한다..

 

 

그 외에 string resource 와 image button 에 대해 설명이 잘 나와있었다

 

..... 그냥 몇번 읽고만 넘기려다가

책리뷰쓰려고 보니 결국 구현 해보기루했다

왜 읽을땐 쉬운데 만들면 이렇게 어려운지

728x90
728x90

요즘 자기전에 짬짬히 읽어서 1~4장까지 오늘 읽었따

아직 코딩은안해봤는데 여기까지는 안드 스터디잼 하면서 뭣도모르고 짜증내면서 따라서 코딩해본(?) 부분이라서 헐 이게 이뜻이었구낭~ 하면서 읽어가는 중이다.... 

1~4장 리뷰 한번에 쓰려했는데 쓰다보니 많아져서 따로써야겟당 낼마저 쓸..까..?

 

1장 

간단히 스튜디오 설치와 SDK등에 대해 얘기해주고, 

레이아웃 파일과 리소스 등의 파일 구조에 대해 알려준다. 

리소스의 리소스 ID는 R.class에 자동으로 생성된다는 것....

여기서 아항 그래서 맨날 R.class.뭐시기 하는구나 했다 (당연한건데 설명해줘야 아는 ㅠㅠ)

 

그리고 간단히 버튼을 만들고 리스너를 설정해보는데 

Button객체를 선언하면서 lateinit을 사용하는 이유를 배웠다... 

클래스 속성 정의시 초기화를 해야하는데 버튼객체가 인플레이트 되는 시점은 onCreate, setContnetnView가 호출되고 실행되는 때 이므로 그 밖에서 선언할 때는 lateinit을 사용하는 것이다. 

 

그리고 예시에서 리스너를 익명 클래스로 사용하는데 이 부분은 배우긴 했지만 뭔가 맘으로 잘 안받아들여져서.. ㅠㅠ 코틀린 문법 공부를 더해야하나 싶다... 

 

텍스트로 된 책인데도 자동 임포트 같은 부분을 잘 알려줘서 참 좋당 가끔 이런거 다 안쓰고 타이핑하게 만드는 악덕한책들도있는데 하하.... 아니 그게 배우는 과정이라면 할말은 없지만.... 

 

암튼 뭐든지 사용할때 뭘 상속받은 클래스인지 파라미터의 의미는 뭔지 친절하게 설명해주니 참 좋다.... 

 

마지막 부분에는 빌드 과정에 대해서도 간략히 소개하여 그 부분을 3번은 읽어보았당

 

 

 

 

근데 처음...처음만드는 사람이 보기엔 좀 어렵지않낭..? 아니 경력 프로그래머면 괜찮으려나 ㅠㅠ 책제목이 실무 어쩌구니깐..... 

 

728x90
728x90

최근 공부일지는 안쓰지만...(아무래도 이것도 질려버렸나보다 참 한결같이 반쯤 꾸준한 나...)

공부는 열심히하고있었다

 

요즘 재미들린건 리눅스를 통해 운영체제에 대해 공부하는거랑... 

 

실무에 바로 적용하는 안드로이드 프로그래밍 << 이 책이다... 

 

구글의 안드로이드 개발자 코스를 따라가며 + 인프런 강의도 들으며... 조각조각 배운 안드로이드 개발을 이 책이 예쁘게 정리해주는 느낌이다... 

 

별 관심 안가는 파트도 있긴 하지만 꼭 이해하고픈 파트도 많아서 

 

퀄리티가 어떻든 완독을 한번 해보고싶다.... 

 

블로그에 기록 남겨야지!!! 화이팅!!!!

728x90
728x90

1.안드 프로그래밍 실습과제

 

프로젝트만 13개...

레이아웃...이 과제라서 금방할줄알았는데 이게 머선일이고.....

노가다를 거듭해 결국 과제를 마쳤다 3시간은 걸린거같당

 

저 프로젝트들 깃에 올려볼까했는데 .ignore를 저기 보이는 디렉토리에 놨더니 인터넷서 주워온 .ignore는 경로가 적절하지않아서......

고민하다가 일단은 말기로했다

그래도 시간날때 .gitignore 연습해서 올려봐야지

 

예전에 오픈소스 플밍 들을때 깃 배우고 시험봐도 하나도 모르겠는데 이게 무슨 쓸모인고..생각했는데

 

여전히 깃 초보지만 그래도 찾아보면 쪼금 알아들을 배경지식은 그 수업때 잘 얻은거같다....

 

2. 리눅스 프로그래밍

 

vi랑 많이 데면데면한데 좀 친해지는 중이다

오늘 원래 c프로그래밍 실습하는 날였는데 cli에서 코딩하고 빌드하고 하는게 하나도 이해가 안되고있었는데 왠지 gcc로 컴파일하고 실행하고 요런 흐름들이 조각조각나있던게 사라락 합쳐졌다....

쪽팔림을 무시해버리고 궁굼한거 맘대로 교수님께 다 물어본 효과가 나오는거같당

앞으로도 교수님을 많이 괴롭혀서 많이 배워야징 얌얌

 

슬슬 바빠진다 키보드 치는 시간이 많아진다 거북목이 되어간다 으윽.... 왜 2시반이냐구

 

728x90
728x90
더보기

수업과 과제를 하기위해 리눅스(우분투20.04)에 새로 VS code 를 설치했다..
C/C++ Extension 을 설치하고

그리고 시험삼아 Hello world 를 실행해봤는데 요런 오류가났당

 

Error: The cppbuild task detection didn't contribute a task for the following configuration

 

게에엑...

그리고 구글링해보니 익스텐션 최신버전에서 컴파일 오류가 났었다는 사람이 있어서

대충 최신인 1.6.0 에서 1.3.0으로 다운그레이드 시키니 컴파일이 잘 된당

 

1,2,3 순서대로 찾아가서 다운그레이드하기!

 

 

 

참고한 글 :

https://www.python2.net/questions-1284162.htm

728x90
728x90

학교 리눅스 수업 과제로
makefile 에 각 줄이 무엇을 의미하는지 주석을 달아 업로드하는 과제가 있었는데
scp를 이용해 업로드를 하려니 저런 오류가 떴다....

결론적으로 나는 포트 옵션을 잘못 넣어서 저렇게 뜬거였음



위 오류가 나는 이유는 크게

1. ㄹㅇ 경로가 없음 > mkdir 명령어로 폴더를 만들어 주도록 하자
2. 명령어 오류 > 아주 단순 오타일수도 있고... 나처럼 옵션을 잘못 넣었을 수도... 나는 포트를 -P 포트번호 이렇게 넣어야하는걸
P- 포트번호 이딴식으로 잘못넣었었다 하하... ㅠㅠ
3. 포트오류 > 내가 실습용으로 이용하는 서버는 22번 포트가 닫혀있어 매번 포트번호를 넣어줘야하는데 가끔 이상한 숫자를 넣곤한닫....하하

결국 내가 성공한 명령어는 아래와 같다

scp -P 포트번호 /home/경로경로/파일이름 유저네임@서버 : /서버내저장할경로/경로/


이렇게 하고 권한 확인을 위한 비밀번호를 넣으니 업로드가 완료되었다!

scp manual 과
참고한 링크를 첨부하며 글 마무리...

728x90

+ Recent posts