너무 늦은 글이긴 하나, 이와 관련한 정보를 여쭤보는 문들이 간혹 계셔서 한 번 정리를 빠르게 해보고자 합니다.


4. GPA

우선 GPA에 관해서입니다만, 저는 학부의 경우 학부 GPA가 좋았습니다.

예전에 언급했었는지 모르겠지만, 컴퓨터로 복전을 하기는 했었지만, 

이전 주전공에서와 컴퓨터 과목들 모두 좋았었어요.

확실한 건 4.2이상이었습니다 4.5 만점에.

(이게 도움이 안 되었을리는 없지만, 제 학점보다 낮은 3.8 정도로도 가는 사람들을 좀 보기는 했습니다. 

충분히 다른 부분에서 커버가 가능하다면 괜찮을 것 같습니다!)

 


5. 영어시험 (IELTS / TOEFL)

영어시험은 사실 가장 기본이라고 할 수 있겠네요. 점수에 대해서는 그래서 말하지 않도록 하겠습니다. 다만, 이거는 고고익선이 맞을 것 같아요. 저 같은 경우 IELTS로 영국을 갈 생각도 있었기 때문에 이 시험으로 봤는데요, writing만 빼고 모두 8.5~9.0의 점수를 받은 점을 참고해 주시면 될 것 같습니다. 미국 학교에서 환산점수표가 각 학교마다 있을 텐데 그때 제가 기억하기로 110점 이상이었던 것 같네요.

 

우선 하나 알아두면 좋은 점은 TOEFL만이 아닌 IELTS도 미국 대학교들이 받는다는 점입니다 (석사 기준으로 말씀드립니다.)

사실 IELTS가 사람에 따라서는 TOEFL보다 점수가 더 잘나오는 분들이 있기에 이 또한 추천드리는 겁니다. 또한, 영국을 생각하는 경우 IELTS를 꼭 봐야 하는 학교들도 있기에 저는 더더욱 IELTS를 봤네요. 

하지만 미국의 경우 대학교들이 IELTS를 인정하는 것은 아니고 예외가 있는 학교들도 있으니 잘 알아보고 대비하는 것이 좋습니다.

 

공부했던 방법은 IELTS의 경우를 말씀드리면 공식 문제집을 2개 사서 한 번 쭉 풀어봤던 기억이 나네요. 사실 외국에서 살았던 경험이 있기도 하고, 영어를 많이 읽는 전공을 가지고 있었기에 점수가 좋게 나왔던 것 같습니다.

하지만 저도 한 번에 좋은 점수를 얻은 것은 아니고, 2번 시도 했었습니다 :)

 

주변에서 그런데 공부한 방법을 들어보면 해커스 토플학원을 다닌 것 같더라구요! 아무래도 체계적으로 빡세게 하는게 좋긴 하니까요!

"일부 항목을 건너뛰어야 하기 때문에 작업을 완료할 수 없습니다." - 문제 팝업창

맥북을 사용하면서 외장하드를 연결시키고 삭제를 했을 때 발생하는 문제이다.

혹은, 권한에 대한 문제가 있는 파일 및 폴더들에 대한 문제이다 (권한이 걸려있는데, 다운은 받았지만, 내가 권한이 없어서 변경조차 하지 못하는 파일들).

 

구글링을 통해서 계속 검색을 했으나, 제대로 되지를 않았다...

 

결국 해결방법은 영어로 검색해서 찾아낸 방법!!!! (영어는 신이다...)

 


[해결방법] 출처: https://apple.stackexchange.com/questions/412996/folder-wont-delete-from-trash-for-cant-delete-imageitems-because-its-pathn

  1. Open the Terminal.
  2. Type in sudo rm -rfv  (don't forget the space!)
  3. Open the Bin.
  4. Select all items from the Bin and move them to the Terminal.
  5. Run the command and enter your password.
1. 터미널을 연다
2. sudo rm -rfv  (-rfv뒤에는 반드시 빈칸이 하나 있어야 한다)
3. 휴지통을 연다
4. 휴지통의 아이템들을 끌어서 터미널에 놓는다 (==Drag&Drop)
     => sudo rm -rfv (끌어다 놓음으로써 자동으로 경로들이 적힌 아이템의 경로들)
5. enter를 눌러서 실행시킨다 + pw를 물어보면 pw를 넣는다.

 


계속 해결이 되지 않았는데, 이것으로 한 번에 해결이 되어버렸다...

행복하다 ㅠㅠㅠㅠ

굉장히 오랜 시간동안 삽질을 하면서 알아낸 방법으로,

timer를 만들어서 ViewController가 특정 행동을 하게 하는 것보다 간단한 방법이어서 해당 방법에 대해서 간단히 정리해보고자 한다.

    override func viewDidLoad() {
        super.viewDidLoad()
        [firstMainView].forEach { view.addSubview($0) }
        configureConstraints()

        // 여기서부터가 중요
        DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
            let nextVC = NextViewController()
            self.navigationController?.pushViewController(nextVC, animated: true)
            self.navigationController?.isNavigationBarHidden = true
        }
    }

ViewDidLoad()에 DispatchQueue.main.asyncAfter(deadline: .now() + 3.0)를 넣는다.

여기서 3.0은 delay시간으로, 3초를 delay한다는 의미이다.

DispatchQueue.main.asyncAfter(deadline: .now() + 3.0)를 통해서 특정 행동을 3초만큼 딜레이 시키겠다는 의미이다.

해당 코드의 경우, NextViewController로 자동으로 전환되도록 만들었다.

 

 

출처:

https://developer.apple.com/documentation/dispatch/dispatchqueue/2300020-asyncafter

 

Apple Developer Documentation

 

developer.apple.com

https://developer.apple.com/documentation/dispatch/dispatchqueue

 

Apple Developer Documentation

 

developer.apple.com

 

이번에 맥을 MacOS Ventura 13.01로 업데이트를 하면서 역시나 문제가 발생했다.

바로 Xcode가 문제를 일으킨 것이다.

특히 나의 문제는 Xcode가 열리기는 하지만, git pull ~과 같은 부분들이 작동을 하지 않고 crun: error: invalid active developer path와 같이 계속 에러를 출력하는 것이다.

해당 문제를 해결하기 위해서는 xcode-select --install로 해결을 하라고 한다.

문제는 그렇게 해결이 되지 않고 계속 소프트웨어 설치를 실패했습니다라고 뜨는 문제다.
이 문제를 해결하기 위해서 정말 많은 검색을 했는데 결국 해결방법은 다음과 같다

 

1. 개발자 사이트로 들어가서 다운로드를 선택하여 개발자 사이트로 들어가고 (Xcode를 다운받는 과정과 같다)

해당 사이트의 오른쪽 상단에 "다운로드"를 눌러서 사이트로 들어가라

 

2. more downloads에 들어가면 Command Line Tools for Xcode 14.1이 있을 것이다 (아마 추후에 Xcode 업데이트가 되면 14.1보다 큰 숫자가 될 것으로 예측된다).

이걸 다운 받자.

View Details를 누르면 이렇게 생겨서 .dmg파일을 다운 받으면된다

 

3. 다운 받은 것을 이제 설치해주면 끝!

대학원을 위해서 필수로 준비해야 할 것이 바로 추천서입니다.

추천서의 경우, 교수님 뿐만 아니라 만약 일을 하고 있다면 상사분께 부탁을 드릴 수도 있습니다만,

제가 알기로는 필수 조건은 적어도 한 분은 교수님이셔야 한다는 겁니다.

 

저의 경우, 학부생활 졸업 직전에 대학원에 지원을 하는 것이었기 때문에 교수님들께 부탁을 드렸습니다.

 

개인적으로 가장 힘들었던 부분이 바로 교수님들께 추천서를 부탁드리는 것이었습니다.

바로 교수님들을 찾아가서 "추천서 써주세요~"라고 할 수는 없다는 것이 저만의 생각이었습니다.

또한, 어떤 분들께 찾아가야 할지에 대한 고민도 깊었습니다.

그리고 대학생 커뮤니티 같은 곳을 보면 꽤 흔히 볼 수 있는 질문인 "교수님들께 어떻게 찾아뵈야 할까요?"라는 질문은 저 또한 고민을 한 부분이었습니다.

 

결론적으로는 다음과 같이 해결을 했습니다.


1. 메일을 드렸습니다. 메일 내용은 "대학원 진학에 대해서 고민이 있고, 이에 대해서 교수님과 상담을 받고 싶습니다." 라는 내용이었습니다.

물론 저렇게 단순하게 한 줄을 보내는 것은 당연히 아니고,

- 내가 누구인지(아무래도 복수전공이다보니 교수님들께서는 저라는 사람을 잘 모를 수 있기 때문에 설명을 1~2줄 정도는 넣었던 것 같습니다.)

- 어떠한 경로로 대학원에 대해서 고민을 하게 되었는지 / 무엇을 꿈꾸고 있어서 대학원을 생각하게 되었는지

- 성적이 어떻게 되는지 (약간.. 해외 대학원을 시도할 자격과 얼마나 성실하게 학업에 임했는지를 드러내기 위해 이 내용을 포함시켰던 것 같습니다)

메일 내용은 이 정도의 내용을 간단명료하게 보내드렸던 것 같습니다.

어차피 상담을 하게 되면 자세한 내용을 할 것이기에, 메일은 바쁘신 와중에 빠르게 읽으실 수 있을정도로 작성했습니다.

 

2. 상담 시간이 정해지고 교수님을 뵙기 전에 어떤 부분들을 상담할지 정리를 해갔습니다.

추천서만 받는 것이 아니라, 교수님께 가서 정말로 상담을 받는다는 마음으로 가면 좋을 것 같습니다.

가자마자 추천서 해주세요라는 말부터 시작을 하는 것이 아닙니다.

정말로 상담을 받듯이 교수님의 경험과 전문성을 토대로한 조언들을 받을 수 있으면 받고, 

내가 준비한 것들을 어필하는 것이 중요하다고 생각합니다.

 

제가 뒤늦게 깨달은 것이 있다면, 교수님들께서 대학원을 가려는 학생을 막는 경우는 드문 것 같습니다.

오히려 흔쾌히 가라고 말씀하시고, 도와주시려는 경우가 더 많은 것 같습니다.

저는 복수전공생이었기에 교수님들께 연락하는 것조차 겁을 먹었습니다.

과연 상담을 해주실까? 대학원에 대해서 안 좋게 보시지 않을까? 추천서를 안 써주시지 않을까?

다양한 고민들과 부정적인 생각들이 많이 생겼고, 저에게 있어서는 CV를 쓰는 것보다 더 긴장되고 겁이 났던 것 같습니다.

하지만, 직접 교수님들을 모두 뵙고 상담을 받고 이야기를 들으니 흔쾌히 도움을 주셨던 분들이 모두였습니다.

너무 걱정을 하지 않으면 좋을 것 같습니다. 

충분히 준비를 하고,

충분히 의지를 가진다면,

그리고 안된다고 하더라도 괜찮다는 생각으로 일단 문을 두들겨본다면 

분명 좋은 방향으로 나아갈 수 있을 것이라 생각합니다.

 

결론적으로, 저는 상담을 많은 분들께 부탁을 드렸고, 추천서도 잘 받을 수 있었습니다.

이미 도움을 주신다고 하신 이후로는 당당하게 대학원 추천서들을 부탁드리면 되겠습니다.

(그리고 혹시 가능하다면 대학을 몇 개 정도까지 써주실 수 있는지도 조심스럽게 마지막에 여쭤보는 것도 좋다고 생각합니다. 대부분 교수님들은 몇개든 다 써주시는 것으로 알게 되었으나, 어떤 학교들은 갯수를 적게는 3개 정도만 써주신다고 합니다.)

 

3. 추천서를 써주신다는 확답을 받은 후

3-1. 우선 메일을 통해서 미리 작성한 CV를 보내드리는 것이 좋습니다

(그리고 미리 작성한 것이 있다면 자기소개서(Statement of Purpose)도 보내드리는 것이 좋다고 생각합니다. 설사 이게 최종본이 아니더라더요!).

교수님께서 추천서를 써주실 때, '나'라는 사람에 대해서 제대로 모를 가능성이 큽니다. 지원자 스스로도 오랜 고민 끝에 정리를 해야 그나마 알게 되는 경우도 있는데, 어떻게 교수님께서 다 아실까요.

따라서, 직접 자신이 한 일들이 깔끔하게 작성된 CV를 보내드림으로써 교수님께 추천서를 조금은 더 편리하게 그리고 더 자세하게 작성해주실 수 있는 도움을 드리는 겁니다. Statement of Purpose를 드릴 수 있으면 좋은 이유는 이 또한 좋은 자료가 되기 때문입니다. 특히, 이 자기소개서는 지원하는 대학원에서도 매우매우매우! 중요하게 보는 내용이기 때문에 교수님께 드리면 더 큰 도움이 될 수 있을 것이라고 생각됩니다.

 

3-2. 추천서를 부탁드리는 방법은 지원서를 작성하는 대학 페이지를 통해 이루어집니다.

지금은 21세기입니다. 모든 것이 온라인으로 이루어집니다.

대학원 지원 페이지를 들어가서 지원서를 작성하다보면 Recommendation 카테고리가 있을 겁니다.

거기에는 2~3명에게 추천서를 부탁할 수 있는 입력란이 존재합니다.

교수님 성함, 이메일, 연락처, 주소 등을 입력하게 되어있고, 입력하고 나서는 입력한 이메일로 추천서를 부탁하는 메일이 교수님께 바로 보내집니다. 

 

이런 시스템들은 지원서를 작성하는 과정에서 이루어지는데,

대학에 따라 최종 작성을 마치고 application fee를 내기 전에 대부분 이루어지지만, 간혹 내고 나서 해야하는 경우도 있기 때문에 이를 잘 알고 deadline도 잘 맞춰서 교수님께 부탁드리는 것이 중요합니다.

deadline을 넘기게 되면 답이 없습니다.

 

안전하게, 그리고 예의를 생각하여 2주 전에 지원서를 작성하여 교수님들께 추천서를 부탁드리는 것이 좋습니다.

또한, 이렇게 추천서를 지원 페이지에서 보냈다면, 당연히 교수님께 연락을 별도로 드리는 것이 중요합니다.

(아마 여러 개를 보내게 된다면, 교수님마다 어떻게 어떻게 해라~ 라는 말씀을 해주실 거라 생각됩니다. 예를 들어, 그냥 보내기만 하면 이메일이 오니까 따로 연락을 안해도 된다~라던가, 보낼때마다 연락을 해라~라던가.)


이렇게 추천서에 대한 내용을 경험에 의거하여 정리해봤습니다.

결론적으로는 겁을 먹지 말고 교수님들께 모두 상담을 받아봐라.

미리 상담할 내용을 잘 정리해서 가라.

추천서는 deadline 2주전에는 교수님들께 부탁(=지원서 페이지에서 교수님께 추천서 부탁 메일을 보내도록 하라)하는 것이 좋다.

 

그리고 당연하겠지만 항상 추천서를 작성해주시는 교수님들께 감사 또 감사하라.

이렇게 일일이 추천서를 작성하는 것은 정말로 수고스러운 일이라고 생각합니다.

열심히 하겠다는 학생을 믿고 시간을 써주시는 만큼 항상 감사한 마음을 잊지 않으면 좋을 것 같습니다!

포트폴리오에 대한 이야기는 CV 작성을 하는 과정에서 사용하는 것으로 나름 자세하게 적었습니다.

링크는 아래의 링크로 가서 4. Notion을 활용한 CV/Resume 작성하기을 보면 됩니다.

https://gettingtoknowit.tistory.com/157

 

[미국 대학원 석사 지원 과정] 1. CV / Resume 작성법

학원이나 다른 분들이 어떻게 미국 대학원 석사 지원 과정의 시작을 하는지는 잘 모르겠습니다. 하지만 저의 경우, 스스로를 알아가는 것에서부터 시작하는 것이 중요하다고 생각되었습니다.

gettingtoknowit.tistory.com

 

CS 석사를 하는데 있어서 포트폴리오 자체에 대해서 제출해야 하는 곳도 있지만 제출하지 않는 곳도 존재합니다.

내가 넣었던 대학들은 일반 CS를 중심으로 넣었기 때문에 포트폴리오를 제출하지는 않았습니다.

포트폴리오를 노션으로 옵셔널하게 해놓는 것이 좋다는 것은

CV를 작성하기 전, 노션을 활용하여 깔끔하게 가독성이 좋게 자신이 한 일들을 모두 적어놓는데 유용하기 때문입니다.

또한, 이렇게 정리한 포트폴리오들은 충분히 미래에 다른 곳에서도 활용이 될 수 있으니 평소에 조금씩 정리해두는 것이 좋다고 생각됩니다!

 

트리 이론을 공부한 후 가장 처음으로 건드려보려고 한 문제가 바로 이 문제다.

preorder (root --> left --> right) traversal의 순서는 알았지만, 

정확히 이것을 리스트로 받고 처리를 하는 것인지에 대해서 고민이 많았다.

 

그리고 현재 계속 "재귀"에 대한 이해를 제대로 잡고 가기 위해서 이번에는 재귀를 제대로 잡자는 생각으로 재귀로 코드를 짜 보고자 하였다.

 

우선 과거에 자료구조를 공부할 때, C언어로 잠깐했었는데, 언뜻 기억났던 코드가 바로 다음과 같은 코드였다.

void traversal(node){
    if ( node){
        visit(node); preorder
        traversal(node -> left);
        #visit(node); inorder
        traversal(node -> right);   
        #visit(node); postorder
    }  
}

 

그럼 위의 코드를 이제 리트코드에 준 문제에 맞게 만들어야 했는데,

정말로 고민을 많이 했다.

 

어디서 어떻게 코드가 들어가야 하고,

재귀는 정확히 어떻게 이루어지는지가 고민이었다.

 

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        visited = []
        if root is not None:
            visited.append(root.val)
            # print(root.val, "afterAppend", visited)
            visited.extend(self.preorderTraversal(root.left))
            # print(root.val, "afterLeft", visited)
            visited.extend(self.preorderTraversal(root.right))
            # print(root.val, "afterRight", visited)
        return visited

 

여기서 visited.extend도 핵심이다.

 

처음에 나는 그냥 self.preorderTraversal(root.left)라고 했었다.

그런데 이렇게 하다보니, visited를 return 했을 때, 제대로 이 값들을 추가를 시켜주지 못했다.

그러다 보니 답이 [1]에서 멈춰있었다. 

 

그래서 제대로 어떻게 코드가 처리되고 있는지를 알기 위해서 위에 주석 처리된 print문들을 찍게 되었고,

이를 직어보니 [1] [2] [3]과 같이 재귀를 돌 때 제대로 숫자는 리턴 하지만,

최종적으로 값들을 하나의 리스트에 저장하지 못했다는 점이 있었다.

 

따라서, 이를 해결하기 위해서, 재귀를 해서 리턴하는 값을 리스트에 넣는 코드로 수정이 필요했고,

이를 위해. extend()를 사용하게 되었다.

 


아직도 해당 코드를 보아도 제대로 이해를 했다고 보기는 어려운 것 같다.

다른 사람에게 설명하라고 하면 내가 제대로 설명을 하고 있는가에 대해서 스스로 의문을 가지고, 

설명하는 도중에도 왠지 막힐 것 같다는 생각이 든다.

 

따라서, 해당 문제는 계속 더 공부가 필요하다고 느낀다.

 

 

 

최근에 트리 이론과 재귀를 제대로 이해하고 이제 직접 코딩으로 구현을 해보는 연습을 하고 있는 중이다.

그 중에 내가 풀어놓고 답인지 아닌지 햇갈렸던 문제 중 하나가 위의 문제였다.

일단 답은 다음과 같이 간단하게(?) 구현이 가능하다.

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        else:
            return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1

 

일단 if not root 부분은 base 코드, 즉 재귀를 끝내기 위한 코드인 것은 금방 추론이 가능하다.

문제는 return 부분이다.

 

최대한 쉽게 말로 풀이를 해보자면 이렇게 된다.

  1. 우선 3으로 root가 시작된다
  2. 3의 root.left는 9가 된다.
  3. self.maxDepth(root.left)에는 9가 들어가는 것이므로, maxDepth(self, 9)가 된다.
  4. 9가 들어오면 일단 다시 else문으로 가게 된다.
  5. 9일 때, self.maxDepth(root.left)와 self.maxDepth(root.right)는 둘 다 null이므로, return max(0, 0)+1이 되므로 return 1이 된다.
  6. 따라서 이제 9일 때 1이 나오기 때문에 재귀한 것을 타고 올라가면, 맨 처음 root가 3이었을 때, max(1, self.maxDepth(root.right))+1인 것을 알 수 있다.
  7. 이제 self.maxDepth(root.right)도 똑같이 해주면 (이 경우에는 20이 들어가고, 들어간 후 각각 15, 7이 나올 것이다)), 결국 root가 3이었을 때, return self.maxDepth(1,2)+1이 된다.
  8. 따라서, 결론적으로는 return 2+1 즉, return 3이 나온다.

재귀는 계속 풀어봐야하는 것을 느낀다.

과거에 여러 번 코딩테스트 시도를 실패했던 첫 번째 관문 중 하나가 나에게는 항상 재귀였다 (이를 활용한 트리도...).

계속 여러 문제를 이번에는 끈덕지게 풀어보고자 한다.

During a challenge on developing an app, I was able to learn that there is a specific guideline that all developers, or rather, designers, follow. 

However, it did come to mind that if it is okay to design something that does not fit the HIG.

 

This instance came up from when our tabbar and navbar part of our design was made differently to HIG.

The most different part would be that we designed a custom button that leads to a "scanning" camera view, and not the typical navbar like home button.

During the discussion on this, we were able to think on the following points.

 


- Nav bar talks about all the rooms you can get to
- Nav bar has a standard language ==> because in all of the iOS apps, user expectations exist ==> muscle memory kind of builds upon this particular design
- The scan button isn’t needed right here right now!
- The button doesn’t say == feel like it’s a button!

 


 

During the HIG discussion, it did come to me that there is a reason for the existence of guidelines. 

The guidelines would have been made from researches in areas such as psychology.

While giving changes to the HIG to fit the app's theme can be used, if there isn't a better reaason sticking to the standards would be safe and convenient.

 

Doing a project without a team leader might sound strange, yet in a way, this particular situation is without a doubt one of the best ways to actually create communication between team members.

 

I participated in a challenge as a team member where I had to make a prototype of an app within a month.

Since the team did not have a so-called "team leader", there were times were difficulty in making a decision when opinions tied to 3 versus 3.

Also, when it came to "time," time management came to an issue. Decision time took to long.

 

After the challenge finished, it came a time where we were able to review and reflect on our progress.

Through discussing and getting advice from an advisor we were able to get the following conclusions.

 


In a democratic world, we vote in order to get the majority of people satisfied. However, the voting system is not always perfect, for the voting can bring a "wrong" decision anytime.

Therefore, in order to get the most out of the voting sytsem, one must make it clear on what we are voting for.

 

Prioritizing is important: everybody shoudl talk about what they want to achieve from the particular challenge(i.e. project).

The conclusion through the prioritizing and discussion, we should always ask a question: "Are you able to achieve what you wanted to do from the challenge?"

 

Having said that, I do not think that "a" leader is needed.

Everyone can become "leaders".

"Leaders" just need to follow the "BE-DO-HAVE"

- have the mindset "BE the leader"

- DO what leaders do without having the title, "leader"

- HAVE the title, "leader"

 

This can be related to the term, "intrapreneur"

(Intrapreneur: how do you leaad everyday life without being in a proper context"

This would be similar to "what is my impact" "what am I here to do?" "How am I going to do it?"

 

And then we can think of "babies". 

Babies are able to get pretty much anything and everything they want. You could say they are the best leaders.

They don't do anything, but make people feed them, change their diapers and so-on.

 

Considering all this, "genuinely being here" bit still having big influential powers.

 


Through the discussion of leadership, it gave me an insight on how different leadership can be in contrast with the traditional leaderhsip.

The traditional leadership we know is the decision maker in time of conflict.

However, the leadership we talk about now is where everyone is a decision maker, or rather, a gatherer of decisions and a person who asks questions.

 

While I have always seen a leader as someone who is able to push and pullpeople, I was able to recognize that a leader is not made to do that. Rather, it is a person who is able to volunteer and stimulate for the better need.

+ Recent posts