라즈베리파이에서 usb 사운드 카드로 소리 녹음하기, 스팩트럼 분석하기

라즈베리파이/비가청주파수 프로젝트 2015.11.06 01:26


1.    RaspberryPi 2, USB sound card 



OS: Raspbian Wheezy (Raspbian Jessie
/etc/modprobe.d/alsa-base.conf 없음)

 Python 2.7

2.    http://www.g7smy.co.uk/?p=283 


3.    http://computers.tutsplus.com/articles/using-a-usb-audio-device-with-a-raspberry-pi--mac-55876





4.    http://venusdebris.tistory.com/474



 

5.    http://computers.tutsplus.com/articles/using-a-usb-audio-device-with-a-raspberry-pi--mac-55876



 

6.    http://blog.blainebuxton.com/2015/05/getting-usb-sound-card-configured-for.html




7.    





8.    Test http://www.g7smy.co.uk/?p=283


9.    FFT original code reference https://www.raspberrypi.org/forums/viewtopic.php?t=35838&p=454041


10. https://code.google.com/p/android-notifier/issues/detail?id=26


11. http://stackoverflow.com/questions/17680221/change-audio-card-on-pyalsaaudio?answertab=votes#tab-top



12. http://stackoverflow.com/questions/730764/try-except-in-python-how-do-you-properly-ignore-exceptions


13. Python code

#!/usr/bin/env python

 

#Audio equalizer using USB sound card

 

import alsaaudio as aa

import smbus

from time import sleep

from struct import unpack

import numpy as np

import pdb


 

#set up audio

card_info = {}

for device_number, card_name in enumerate(aa.cards()):

    card_info[card_name] = "hw:%s,0" %device_number

 

sample_rate = 44100

channels = 0

chunk = 512

spectrum_unit = 128 #factor of chunk*0.5

data_in = aa.PCM(aa.PCM_CAPTURE, aa.PCM_NORMAL,card_info["Device"])

data_in.setchannels(channels)

data_in.setrate(sample_rate)

data_in.setformat(aa.PCM_FORMAT_S16_LE)

data_in.setperiodsize(chunk)

 

 

 

def calculate_levels(data, chunk, sample_rate):

     #convert raw data to numpy array

    data = unpack("%dh"%(len(data)/2),data)

    data = np.array(data, dtype='h')

     #apply fft - real data so rfft used

    fourier = np.fft.rfft(data)

     #remove last element in array to make it the same size as chunk

    fourier = np.delete(fourier, len(fourier)-1)

     #find amplitude

    power = np.log10(np.abs(fourier))**2

   


    power = np.reshape(power, (spectrum_unit,0.5*chunk/spectrum_unit))


    matrix = np.int_(np.average(power,axis=1))

    return matrix

   

print "processing.."

 

while True:

    #read data from device

    l,data = data_in.read()

    #pause capture while RPi processes data

    data_in.pause(1)

    if l:

         #catch frame error

         try:

              matrix=calculate_levels(data,chunk,sample_rate)

              for i in range(0,(spectrum_unit/2)-1):

                   print '%2d' % matrix[i],

              print '%2d' % matrix[(spectrum_unit/2)-1]

              for i in range((spectrum_unit/2),spectrum_unit-1):

                   print '%2d' % matrix[i],

              print '%2d' % matrix[spectrum_unit-1]

              print ""

         except Exception, e:

              if e.message != "not a whole number of frames":

                   print e

    sleep(0.5)

    #resume capture

    data_in.pause(0)

 


 

14. Output



15. Array into 128 rows (each with 2 elements)

0~22000Hz 


I will utilize inaudible sound 20000Hz~22000Hz

저작자 표시 비영리 변경 금지
신고

카이스트 전산학부 대학원 2015 가을학기 국비 선발 합격 후기

카이스트 대학원/2015-후기 합격 후기 2015.07.02 16:12



카이스트 전산학부 대학원 2015 후기 선발 합격 후기입니다.


서류전형


일단 저의 학점은 총평점 평균 3.95/4.5 이고, 전공 평균 4.06, 교양 및 기초과목 평균 3.82 입니다.

(졸업 학점 4.0/4.5 전공 평균 4.13)


수원의 한 대학교에 다니고, 4학년 OOO명중 OO등이었습니다. 

수상 및 어학 자격증은


1. 교내 아이디어 경진대회 장려상

2. 교내 학술제 경진대회 4위 입상

3. 교내 캡스톤 종합설계 경진대회 은상

4. 독학으로 토익 840점

5. 대학원 인턴 경험 - 한국통신학회 종합겨울학술대회에 기초적인 논문 제출 및 전시 경험
6. 해외 유학 및 거주경험 전무 토종 한국인

7. 자전거 국토종주 선두그룹, 리더십 경험

8. 구글 플레이 스토어에 어플 업로드 경험

9. 교내 소학회 공연에서 베이스 세션 경험

10. 전공 팀프로젝트에서 주로 리더십을 발휘했던 경험 및 높은 프로젝트 점수

11. 1년간 일반음식점 아르바이트 경험


정도입니다. 


무슨 자신감으로(?) 서류에서 떨어질 생각은 안했기 때문에, 서류 합격 통지 전부터 수학 기초과목 및 전공과목 복습을 시작했습니다.

확률과 통계, 컴퓨터 구조, 시스템 프로그래밍, 운영체제, 객체지향 프로그래밍, 자료구조, 알고리즘, 컴퓨터 네트워크, 광대역 통신(백본 네트워크), 이동통신, 모바일 운영체제, 임베디드 소프트웨어, 계산이론, 웹 프로그래밍, 데이터베이스, 정보보호, 소프트웨어 공학, 소프트웨어 분석 및 설계를 공부해 갔습니다.


과목 모두를 복습하고 키워드들을 암기하는데에 하루에 2시간씩 수면을 하며 6일이 걸렸습니다. 카이스트 면접 때문에 수강하고 있는 과목의 과제와 퀴즈를 포기할 수 없었기 때문에 꽤 곤혹스러웠습니다.


(참고로, 컴파일러, 프로그래밍 언어 이론, 데이터마이닝 같은 과목이 면접에 도움이 됩니다. 저는 수강하지 못해서 아쉬운 부분입니다.)


또한 자기소개서에 기록한 수업 외 활동 내역도 모두 보고서를 재검토 했습니다.


면접


면접은 3일정도 걸리고, 하루에 총 세번이 이루어 진다고 합니다. 아침면접 - 정오면접 - 오후면접이 있다고 하네요. 


아침면접은 오전 8시쯤 시작, 정오면접은 낮 12시쯤 시작, 오후면접은 오후 3시쯤 시작합니다. 하루에 25명정도의 응시생이 있었습니다.


연달아서 면접이 있으니, 조교분들이나 교수님들이 식사도 제때 못하시고 쉬지도 못하셔서 체력이 떨어지실 수도 있습니다.


따라서, 교수님들이 아침 식사를 하시고 잠을 주무시고 나서 시작하는 아침면접이 분위기도 좋고 힌트도 많이주시기 때문에 면접 응시생들에게 유리하고, 오후면접엔 조교님들과 교수님들이 지치셔서 분위기가 안좋을 수도 있어서 응시생들이 불리할 수도 있습니다.(경험에서 나온 지극히 개인적인 의견입니다. 객관적인 사실이 아님을 밝힙니다.)


아침은 든든하게 꼭 드시길 당부드립니다. 저는 긴장을 하면 스트레스성 장염이 있기 때문에 아침은 거르고 초콜릿을 먹고 오렌지 쥬스를 마셨습니다. 뇌에 당떨어지면 대답 잘 못합니다. 조심하세요.


(초콜릿, 쥬스 챙겨준 선배님, 정말 감사해요. 제가 여기에 쓸 정도로 큰 은혜를 입었습니다.)


일단 면접은 프로그래밍 면접 - 교수님 면접이 있습니다. 대략 두시간 ~ 두시간 반 정도 걸립니다.


프로그래밍 면접의 경우, 문제 외부 노출이 안됩니다. 그래서 문제 공개는 안하겠습니다.


문제 수준은 쉽다고 말씀 드릴 수 있고, 코딩을 안다면 누구나 주어진 시간 안에 풀 수 있습니다. 


팁을 드리자면, 거의 모든 예외상황을 고려하고 실행속도가 빨라야 합니다.


예를 들면, java string을 이용한 연산보다 c언어 바이너리 연산이 훨씬 빠릅니다.


정확한 입력이 아닌 모든 예외 입력을 걸러내야 합니다. 숫자로만 이루어진 입력이 주어진다면, 숫자가 아닌 다른 모든 아스키코드는 걸러내어 따로 처리해야 합니다. 입력 범위를 벗어나는 입력도 걸러내야 합니다.


예외상황을 고려 안하고, 실행속도가 느리다면 점수가 낮습니다.


프로그래밍 점수가 낮다고 해도 큰 결점이 되는 것 같지는 않습니다. 일단 문제를 풀기만 한다면 오답이 아닌 이상 일단 점수가 있으니 교수님들께선 문제를 푼 것에 의미를 두시는 것 같습니다.


다음, 면접입니다. 


면접실은 4개가 있고, 각 면접실 앞에 의자들과 조교님이 있고, 면접을 보는 다른 응시생 1명과 자신이 짝을 이루어 대기합니다. 조교님은 응시생이 면접실에 들어가기 전에 문제지를 나누어주고, 면접실에 들어가도 되는지 확인해 주는 역할을 합니다. 각 방에 개인만 들어가서 교수님들과 면접을 봅니다. 면접이 끝나면 짝꿍(?)과 같이 다음 면접실로 이동합니다. 


면접실은 일반적인 강의실 크기는 아니고, 작은 사무실 정도의 크기입니다. 면접실 당 2~3분의 교수님이 계시며, 교수님과 응시생은 약 2m정도 떨어진 가까운 거리에서 면접을 봅니다.


문제지에는 2~3문제가 주어지며, 교수님의 전공에 따라 문제가 다릅니다. 입실 5분전에 조교님께서 건네주시며, 5분안에 대답을 머릿속으로 그려서 입실하여야 합니다.


교수님의 성함을 모르므로 각 면접실마다 교수님 A, B, C로 구분하겠습니다.


4번방(인성면접실)


교수님A, 교수님B, 교수님C
(            책상           )

              나



교수님B: 어서오세요. 자기소개 간단하게 1분정도 해보겠어요?


나: 네, 저는 ~ 입니다.


교수님C: 자기소개서 읽어보니까 동아리 활동을 많이 했네. 저거 아이디어 경진대회에서 입상한건 뭔가?

나: 네, ~ 입니다.


교수님A: 그거 이미 있는거 아니야? 


나: 그 당시엔 없었습니다.


교수님A: 아 그래? 알겠어.


교수님B: 군필이라고 되어있네? 학생 24살 아닌가?


나: 네. 아버지께서 국가유공자이십니다.

교수님A,B,C: 아하


교수님C: 내가 질문 하나만 할게. 정렬되어있지 않은 숫자 배열이 있어. 이 중에 적어도 하나의 중복되는 숫자가 있는지 알아내고 싶어. 자네라면 어떻게 할텐가?


나: 프로젝트를 하면서 그것을 처리해야 하는 고민이 있었습니다. 그래서 해시테이블 자료구조의 중복되지 않는 키값을 이용했었습니다.


교수님C: 오.. 좋은 방법을 사용했네.


교수님B: 음. 그렇다면 Time complexity Order가 얼마인가?


나: Order가 뭐죠?


교수님B: 아... 보자. 일단 무식하게 비교한다고 해보자고. 그러면 숫자 하나에 대해서 배열을 전부 뒤져야 할 것 아닌가? 배열의 크기가 n이면 Order는 n^2이 되겠지.


나: 빅오 말씀하시는 건가요?


교수님B: 빅오? 아 Big O notation? 맞아 그거.


나: 그럼 배열에 있는 값을 해시테이블에 넣어주어야 하니까 n보다는 크고... (침묵) (해시테이블을 만드는 알고리즘을 잊었습니다.)


교수님A: n^2보다는 작겠지?


나: 네... 그래서 해시테이블을 만들려면 그 때...(또 다시 침묵)


교수님A: 숫자 배열을 정렬하는데는 Order가 얼마나 되지?


나: 정렬 알고리즘에 따라 다르지만 최적의 경우 n log n정도 걸립니다.


교수님C: 그럼 해시테이블에 넣어서 값을 비교하는건? 이 프로그램은 중복된 값이 나오면 바로 종료되는 프로그램이야. 전부 검색할 필요 없고 딱 하나만 있다고 결정하면 돼.


나: (...) log 스캐일의 시간이 걸릴 것 같습니다.


교수님C: 왜?


나: 어......(침묵)


교수님A: 시간이 다 됐네. 이만 마치자구.


나: (멘붕중)네...(한숨)


교수님A: 교수님들 앞에서 한숨쉬면 안되지?

나: (멘붕 터져버림 + 식은땀) 네. 죄송합니다.


4번방에선 제대로 대답 못하고 멘붕만 겪다가 나왔습니다. 지금 생각해보면 매우 쉬운 문제였습니다. 해시테이블에 값을 넣으면서 정렬하면 되니 n log n이 걸릴거고, 값을 넣다가 중복되는 키값이 나오면 바로 리턴하면 되는거였습니다. 게다가 한숨까지 쉬었으니 똥망이었죠. 아직 먹었던 초콜릿과 주스의 당분이 뇌로 전달되지 않았나 봅니다.


1번방(컴퓨터 구조, 시스템 프로그래밍, 고급자료구조)


교수님A, 교수님B, 교수님C
(            책상           )

              나


교수님B: 영어로 자기소개 30초정도 짧게 해보세요.


나: (사실 1분어치 준비해감. 대충 반토막내서 30초 함) I'm pleased to introduce myself ~ 쏼라


교수님B: 시스템콜하고 인터럽트의 차이점이 뭔가요?


나: 인터럽트에는 세 가지 경우가 있는데, 시스템콜, 소프트웨어 인터럽트, 하드웨어 인터럽트가 있습니다. 시스템콜은 유저가 운영체제의 특별한 기능을 실행하기 위해 유저에 의도에 의해서 실행되는 겁니다. 그래서 우선순위 구분 없이 운영체제에서 항상 처리되어야 합니다. 시스템콜이 아닌 인터럽트는 우선순위에 따라 처리되는게 다릅니다. 인터럽트의 우선순위가 마스크 레지스터에 의해서 처리되어야 할지 말아야 할지 정해집니다. 소프트웨어 인터럽트는 프로그램의 내부적 이유에 의해서 발생하고, 하드웨어 인터럽트는 하드웨어의 IO나 기타 다른 예외적인 상황에 의해서 발생합니다. 하드웨어 인터럽트는 처리하기 어렵습니다.


교수님B: 왜 하드웨어 인터럽트는 처리하기 어렵나?


나: 하드웨어의 드라이버까지 로직 검사를 수행해야 하기 때문입니다.


교수님B: 드라이버 짜봤어?


나: 시스템 프로그래밍 때 C언어로 임베디드 장비에 드라이버를 설치해 보았습니다.


교수님B: 오케이. 다음?


교수님A: 파이프라이닝에서 브랜치 명령어가 있으면 파이프라이닝에 어떤 영향을 미칠까?

나: (사실 답 모름)어... 파이프라이닝이 효율적으로 동작하기 어려울 것 같습니다. 명령어가 실행되는 중에 서브루틴에 들어가기 때문에 어쩌구...


교수님A: 음... 서브루틴 말하는거 보니까 어셈블리 프로그래밍 얘기하는거 같은데 맞나?


나: (당황)네 그렇습니다. 


교수님A: 그럼 어셈블리 프로그램이 실행될 때 cpu에서 동작하는 5단계를 말해보게.


나: fetch, decode, execute, memory, write back 입니다.


교수님A: 그건 잘 알고 있구만. 그럼 다시 물어볼게. 파이프라이닝에서 브랜치 명령어가 있으면 어떻게 될까?


나: (모름)어... execute에서 다른 루틴을 처리해야 되기 때문에 파이프라이닝의 효율이 떨어질 것 같습니다.


교수님A: 그러니까 왜 파이프라이닝의 효율이 떨어질까?


나: (멀뚱)


교수님A: 파이프라이닝을 잘 모르는것 같구만. 


나: 네 ㅠㅠ


교수님C: Do you know the Heap? Can you explain it?


나: I don't know heap...


교수님C: (영어로)힙을 몰라? 안들어봤어?


나: yes


교수님C: (영어로)그럼 다익스트라 알고리즘은 알아? 그거 설명해봐.


나: (영어로... 버벅대며) row는 반복문을 돌면서 적어나가고, column에는 거리와 노드이름을 적습니다. 최소 거리와 도달하고픈 노드의 이전 노드들을 테이블에 적고, 가장 도달거리가 짧은 노드를 선택해서 배열에 넣습니다. 이 과정을 모든 노드가 방문가능 해 질 때까지 반복합니다.


교수님C: (영어로)그럼 그 최소 거리(minimum distance)는 어떻게 알건데?


나: (영어로... 많이 버벅대며) 반복문을 돌면서 이전 거리와 현재 계산한 거리 중 짧은 것을 선택할 것입니다.


교수님C: (영어로)아니 그래서 어떻게 알 수 있냐고. 아 시간 다됐네. Heap이네.


나: (머릿속으로: 아니 힙 모른다고요.) 감사합니다.


파이프라이닝 개념을 잘 모른 것하고, 영어로 다익스트라 알고리즘 설명하다가 2차 멘붕이 찾아왔습니다. 이 후기 읽으시는 분들은 적어도 알고리즘이나 자료구조쯤은 영어로 설명할 줄 아셔야 할겁니다.하하하


2번방(정보보호, 데이터베이스, 프로그래밍 언어)


교수님A, 교수님B, 교수님C
(            책상           )

              나



교수님B: 간단하게 1분정도 자기소개 해보세요.


나: 네. 저는 ~ 입니다.


교수님B: normalization이 뭐죠?


나: 중복되는 값들이 많은 데이터베이스에서, 데이터를 테이블과 관계로 나타내어서 중복되는 값을 없애나가는 과정입니다.


교수님B: 중복되는 값을 없애나간다고? 그럼 중복되는 값은 모두 불필요한 존재들인가?


나: 아니오. 테이블에 키값들을 이용해서 데이터들이 가질 수 있는 대표적인 데이터로 테이블을 정리해서 그 테이블끼리 키값을 이용해서 관계를 가져 나가는 것이 normalization입니다.


교수님B: 아까 한얘기하고 똑같은 얘기 하고 있는거 같은데? 중복되는 값을 왜 없애는데?


나: 데이터가 차지하는 공간이 낭비되고, 만약 데이터가 수정이 되면 중복되는 값들에 일일이 접근해서 수정해야 하기 때문에 데이터 처리에 효율이 떨어집니다. 아, data redundancy를 줄이기 위해서 normalization을 합니다.


교수님B: 그럼 합쳐서 다시 설명해봐.


나: (똑같은 소리 하면서 버벅버벅) 


교수님B: 얘 또 똑같은 소리 하네. 데이터베이스 안배웠어?


나: 데이터베이스 설계 과목을 배웠는데, 휴리스틱과 트랜젝션에 대해서 배웠습니다.


교수님B: 그렇군.


교수님C: 프로그래밍 언어 과목 수강했나요?


나: 아니오. javascript에서 type이 뭔지 모르겠습니다.(질문이 javascript의 type을 이용해서 나온 새로운 언어들에 대해서 설명하라는 거였음)


교수님C: 그럼 javascript를 아예 안써봤어요?


나: 아니오. 종합설계 프로젝트 할 때 4000줄 정도 코딩 해봤습니다.


교수님C: 그 중에 type error가 한번도 안났어요?


나: 네... 디버깅하면서 Ajax의 에러, http 에러에 대해서만 처리했습니다.


교수님C: 그럼 종합설계 프로젝트에서 javacript 쓰면서 에러 처리를 어떻게 했는지 경험을 얘기해 보세요.


나: 네. (...어쩌구 쏼라쏼라)


교수님C: 프로그래밍 시험 어땠나요? 쉬웠나요?


나: 네. 매우 쉬웠습니다.


교수님C: 어째 쉬웠다고 하는 사람들만 다 점수가 낮은거지?


나: 아마도, 문제 풀이 자체에만 집중해서 인풋 에러같은 것을 처리하지 않았기 때문인 것 같습니다.


교수님A: 자네 정보보호 들었네? 이 과목에서 무엇을 배웠어?


나: CIA에 대해서 배웠습니다. C는 confidentiality이고 이를 위협하는 공격은 쏼라~가 있고, 지키기 위해서 쏼라~ 가 있습니다. I는 integrity이고 이를 위협하는 공격은 쏼라~가 있고, 지키기 위해 쏼라~ 가 있습니다. A는 availability이고, 이를 위협하는 공격은 쏼라~가 있고, 지키기 위해서 쏼라~가 있습니다.


교수님B: 아니 내가 물어봤을 때도 저렇게 대답하면 얼마나 좋아?


교수님A: 자네 정보보호 누구한테 배웠나?


나: 네. OOO교수님 입니다.


교수님A: 아~ OOO? 그래. OO다니다가 교수하는 사람이야. 대답 잘 들었네. 자전거 타기 좋아한다더니 허벅지가 튼실하네?


나: 네. 감사합니다.


이 방에서는 교수님A에게 큰 점수를 받은것 같습니다. 멘탈이 서서히 회복되기 시작했습니다. 


3번방(컴퓨터 통신, 컴퓨터 네트워크)


교수님A, 교수님B
(      책상       )

        나


교수님B: 자기소개 간단하게 1분만 해보세요.


나: 네. 저는 ~ 입니다.


교수님B: CDN에 대해서 설명해보세요.


나: CDN이 뭔지 모르겠습니다.


교수님B: 어... 그럼 학생은 동영상 자주 봐요?


나: 네. 그렇습니다.


교수님B: 그럼 유튜브도 많이 보겠네요?


나: 네.


교수님B: 그럼 유튜브 내의 엄청나게 많은 컨텐츠들이 다 어디서 나올까요?


나: 구글의 데이터센터에서 나온다고 생각합니다.


교수님B: 그렇지. 학생이 데이터센터라고 했는데, 이 엄청난 컨텐츠들을 인터넷에 실어나를 수 있게 하는것(Contents Delivery Network)이 CDN이야. 그럼 데이터센터에 엄청나게 많은 사람들이 모여서 죄다 유튜브 동영상을 본다고 해봐. 어떻게 될까요?


나: 데이터 센터에서 나오는 데이터 트래픽이 엄청나게 많아서 부하가 심할 것 같습니다.


교수님B: 맞아. 그럼 이렇게 큰 부하를 해결하기 위한 방법에 뭐가 있을까요?


나: p2p를 이용하면 데이터센터에 의존하지 않아도 될 것이라고 생각합니다.


교수님B: 왜?


나: p2p는 데이터 트래픽이 서버라는 한곳에 집중하는 형태가 아니라 피어들 끼리 데이터를 주고받기 때문에, 서버의 네트워크 속도에 의존하지 않고 피어는 자기의 최대 대역폭 만큼 컨텐츠를 다운로드 할 수 있기 때문에 서비스가 빠르기 때문입니다.


교수님B: 그럼 학생 학교의 기숙사 생들이 모두 p2p... 요즘 유행하는게 뭐죠?


나: 토렌트입니다.


교수님B: 그래. 모두 토렌트를 사용한다고 해보자. 그럼 학교 네트워크에 무슨 일이 발생할까요?


나: 백본 네트워크와 교내 네트워크를 연결하는 게이트웨이에 매우 큰 부하가 걸려서 다른 사용자들의 서비스 품질이 떨어질 것입니다.


교수님B: 그렇죠? 그럼 다른 질문을 해보자. 수많은 사람들이 컨텐츠를 이용하면 데이터센터에서 엄청나게 많은 트래픽이 발생할거야. 컨텐츠를 클릭할 때 마다 수익이 발생하는데, 이렇게 얻는 수익이 모두 네트워크 사용요금으로 빠져나가. 그럼 학생은 데이터센터를 유지할거에요? 어떻게 할거에요?


나: 데이터센터보다는 토렌트를 다운로드 할 수 있는 서비스를 만들고, 클릭 당 광고를 띄워서 수익을 얻는 편이 훨씬 수익면에서 좋을 것이라고 생각합니다. 그럼 서버의 네트워크 부하도 훨씬 줄어들어서 네트워크 사용요금 부담이 줄어들 것입니다.


교수님B: 학생은 컴퓨터 네트워크의 프로토콜중에 가장 잘 만든 프로토콜이 뭐라고 생각해요?


나: 일단 가장 못만든 것이 IP라고 생각합니다. IP는 Send and pray라서 패킷이 네트워크의 어디를 통해서 지나가는지도 모르기 때문에 불합리적이라고 생각합니다. 그리고 잘 만든 프로토콜은 TCP라고 생각합니다. 불안한 IP를 보완하기 위해서 TCP가 복잡해 질 수밖에 없었고, 잘 만들어질 수밖에 없었다고 생각합니다. TCP는 reliable합니다.


교수님B: 왜요?


나: 세그먼트의 reordering을 할 수 있고, ACK를 하며, 도착하지 않은 segment에 대하여 retransmit을 할 수 있기 때문입니다.


교수님B: 나랑은 정 반대의 입장을 가지고 있는 학생이네. 나는 IP로 인해서 현재 인터넷이 존재한다고 생각하거든. 그렇게 간단하고 유치한 프로토콜 덕분에 지금의 인터넷이 가능해 진거야. IP가 복잡하면 이렇게 대규모로 인터넷 망을 구현할 수 없었을껄?


나: 네. 그렇군요.


교수님B: A 교수님은 학생한테 질문할 거 없어요?


교수님A: (절레절레)


교수님B: 대학원 들어와서 공부하고 싶은게 뭐에요?


나: 모바일 이동통신과 보안에 대해서 공부하고 싶습니다.


교수님B: 학교에서 몇등 정도 해요?


나: OOO명중에 OO등입니다.


교수님B: 등수가 많이 낮은데? 이동통신이랑 네트워크 공부하려면 전자과 과목도 공부가 필요한데 괜찮겠어요? 


나: 네. 할 수 있습니다. 자전거 타기를 좋아해서 체력이 좋습니다.


교수님B: 공부 안하고 맨날 축구하고 자전거 타고 돌아다니는거 아니야? ㅋㅋㅋㅋ


나: 에이... 아닙니다 헤헤


교수님B: 수고했어요.


나: 감사합니다.


3번방에서 화기애애하게 마무리 하였습니다. 방을 거듭할 수록 분위기가 괜찮아져서 면접이 끝나고 개운했습니다.  


승무패는 1패 1무 2승이라고 할 수 있겠네요.


면접을 본 사람으로서 조언을 드리자면,


1. 다른거 보지 말고 교과서 공부하세요.

2. 교과서의 키워드 위주로 공부하세요. 영어 질문 있을 수 있으니 영어로도 준비하세요.

3. 당떨어집니다. 아침에 뭐라도 먹으세요.

4. 학점, 석차 딸린다고 쫄지 마세요. 면접에서 결정지을 수 있습니다.


그럼 전 20000.

신고

앱을 설치하지 못하였습니다 - 기어2, 안드 폰 어플 설치 사이클

타이젠/내가 까먹을까봐 올리는 글 2014.12.03 12:12

이클립스에서 안드로이드 폰에 Integrated app을 설치하면, 그 어플리케이션은 안드로이드 내에서 설치되면서, 삼성 기어 매니저의 SAP를 통해 기어2로 위젯파일을 전송하고 설치한다.


이 과정이 자동으로 백그라운드에서 실행되므로 개발자들은 이 사실을 알기 어렵다.


그래서 삼성 기어 매니저가 SAP를 통해 기어2에 위젯을 설치하는 도중에, 개발자가 Tizen IDE로 기어2에 위젯을 설치하면, 기어2는 삼성 기어 매니저에게 설치 실패 메시지를 전달한다.


따라서 안드로이드 폰은 "앱을 설치하지 못하였습니다" 라는 메시지를 보여주게 된다.


또한 안드로이드 어플 내의 asset 폴더에 있는 위젯 파일이 SAP를 통해 기어2에 설치되므로, asset 폴더 내의 위젯파일의 버젼이 기어2에 설치된다. 


그러므로 안드로이드 어플의 asset폴더에 최신버젼의 위젯파일을 넣고 설치해야 버전 문제에 시달리지 않을 수 있다.


안드 어플에 타이젠 위젯을 담고, 안드 폰에 설치하면 기어2에 위젯을 설치하기 까지 약 1분정도 소모된다. (위젯 파일의 사이즈가 클 수록 오래걸릴 수 있다.)


안드로이드 코드를 수정하고 어플을 완전히 설치하려면 냉수 한잔의 여유가 필요하다. 

저작자 표시 비영리 변경 금지
신고

티스토리 툴바