종로에서 예물을 맞추기 위해 이곳 저곳 돌아다니면서

반지도 껴보고, 가격도 알아보고, 바쁘게 돌아다녔습니다. 

문제는 대부분 비슷 비슷한 반지들이지만 가격은 천차만별이였고, 

일부는 제대로 된 설명도 안해주고 반지에 들어가는 스톤의 정보에 대한 설명도 없고...

엉망인 가게들이 굉장히 많더라구요.

 

그와중에 방문한 동화 주얼리에서 만족할만한 상담을 받고, 

반지와 가드링을 계약 했어요

작은 사각 다이아가 두줄로 들어있는 반지를 결정했고, 여자친구가 더 꾸미고 싶은날 낄수 있는 가드링도 함께 구매 했어요

 

동화 주얼리는 종로 3가역에 있어요~

error: invalid command 'bdist_wheel'

ERROR: Failed building wheel for wget

 

해당 문제로 인하여 몇몇 패키지들이 설치 되지않는 문제 발생.

 

Readme.md 파일 내에 설치 방법이 기술되지않아서

그냥 pip3 install -r requirement.txt 실행 하면서 문제가 발생 하였습니다.

 

해결방법

 

$ pip3 install wheel

$ python3 setup.py install

$ pip3 install -r reqirement.txt

 

setup.py를 설치하면 되는것이였다...

 

시즌이 끝나기전 20년 마지막 지름을 하였습니다.

 

20년에 루베스포츠로 기변을 하였고,

루베 스포츠와 루베 콤프의 사이에서 엄청난 고민 끝에

구동계에서 조금 절약하고 그돈으로 휠셋을 교체하는게 좋다는 이야기를 듣고

나름 합리화를 하면서 20시즌을 탄것 같습니다. ㅎㅎ;

그러던 와중에 급 뽐뿌로 인해서 카본 휠셋을 구매하게 되었습니다. 

 

아비아브 아데온의 구매과정은 예약을 거쳐서 주문생산 방식으로 이루어 집니다. 

 

예약(예약금) -> 제작 -> 잔금결제 -> 배송

 

위 과정에서 무려 2달이란 시간이 소요 되었습니다. 

예약 : 20/11/16
잔금 결제 : 21/01/04
배송 : 21/01/15

구매후 기나긴 기다림 끝에 루베에 장착을 시작 했습니다. 

 

택배 도착

 

 

으마으마하게 큰박스 모습

 

 

자전거 절반만 한 모습입니다.

처음에 택배 받고 깜짝 놀랐...

 

 

작업 시작

 

 

 

휠 교체에 필요한 공구들.

몽키스패너, 스프라켓리무버, 벨브 익스텐션, 테프론 테이프, 6각렌치, 타이어 레버, 스프라켓 홀더

몽키스패너, 스프라켓 리무버, 스프라켓 홀더 :  스프라켓과 브레이크 로터의 탈착에 필요
벨브 익스텐션 테프론 테이프 : 기존 사용하던 벨브의 길이가 짧으므로 연장하기 위해 필요

6각렌치  :  휠셋의 탈착에 필요

타이어 레버 :  타이어 탈착에 도움 (필수는 아님)

 

 

 

순정 루베 스포츠입니다. 

순정휠(R470db)의 림 두께가 얇아보입니다.

 

박스 구성품

 

 

유저 메뉴얼, 부속 파츠, 튜블리스 킷

튜블리스킷 같은 경우 겨울시즌 사은품으로 카본 물통케이지와 튜블리스킷중 한가지를 선택 하여 받을수 있습니다. 

겨울시즌 한정 사은품으로 겨울시즌 외에는 구성품에서 제외될수있습니다.

일단 순정타이어를 사용하고 교체시즌이 될때 튜블리스로 변경할 계획이므로 튜블리스 킷으로 선택 하였습니다.

 

 

 

부속 파츠에는 림테이프 한쌍, 디스크 센터락링, 벨브 익스텐션(벨브코어용), 벨브 코어 공구(?)가 들어있습니다.

벨브 익스텐션의 경우 두가지 방식이있는데, 제 튜브같은경우 벨브코어가 분리되지않는방식이라 추가로 구매하였습니다.

 

 

 

 

박스에 휠두개가 가지런히 들어있습니다.

 

 

최대 압력은 110psi 이지만 루베스포츠 순정타이어 스페셜라이즈드 터보 프로의 경우 최대 압력이 95psi이므로 

둘중 낮은 압력인 95psi 이하로 주입 해주면 됩니다.

 

 

 

 

휠 보호 캡을 제거하는데 저부분이 같이 빠져서 조금 놀랬습니다.

처음에 보호 캡을 제거 했는데 쓰루엑슬 부분에 아무것도 없어서 불량인줄 알았는데 보호 캡에 껴져 있더라구요.

원래 저부분이 저렇게 쉽게 빠지는건가... 쓰루엑슬을 처음이라....

아무튼 보호캡에서 꺼내서 다시 껴줍니다.

 

 

앞휠 무게

 

앞휠의 무게는 750g입니다. 림테이프를 두르면 760g 정도 됩니다.

클린쳐로 사용할테니 760g으로 보면 되겠죠

 

 

 

디스크 로터 분리

 

스프라켓 분리 공구를 이용해서 디스크 로터를 분리해 줍니다. 

 

 

타이어 분리

 

타이어 주걱을 이용해서 타이어도 분리해줍니다. 

 

 

 

루베 스포츠 순정 앞휠 DT SWISS R470db의 무게

 

790g으로 아비아브 아데온의 760g보다 고작30g가볍다...?

 

일단 앞휠이니.. 넘어갑시다..

 

벨브 익스텐션의 필요성

 

 

기존 사용하던 벨브의 경우 림 높이가 높지 않아서 상관없었지만..

아데온의 경우 림 높이가 높아 벨브가 빼꼼 나오게 됩니다.

이러한 이유로 익스텐션을 사용해서 길이를 늘려줘야합니다.

 

 

 

 

 

벨브 익스텐션 설치

 

익스텐션에서 공기압이 샐수있으니 테프론테이프를 몇바퀴 감아주고 익스텐션을 연결해줍니다.

테프론테이프는 다이소나 철물점에서 구입가능합니다.

 

아데온의 부속품에 들어있는 익스텐션의경우 코어벨브가 분리되는 방식의 익스텐션입니다.

본인의 튜브 방식을 확인하시고 분리가 되지않는다면 저처럼 추가 구매하셔야합니다.

 

 

 

익스텐션이 설치 완료 되었다면, 분해의 역순으로 타이어와 로터를 설치해줍니다.

 

 

 

 

뒷휠의경우 920g입니다.

아무래도 라쳇이 들어가기때문에

앞휠보다 더 무거운 것으로 보입니다.

 

 

 

 

기존 휠에 있는 로터와 스프라켓, 타이어를 탈거합니다.

 

 

 

DT SWISS R470db의 뒷 휠의 무게는 1030g입니다. 

아비아브의 920g보다 110g 무겁습니다.

 

 

익스텐션, 타이어, 스프라켓, 로터 장착

 

앞휠과 마찬가지로 익스텐션을 테프론테이프로 감은후 장착해주고, 로터와 스프라켓을 장착해줍니다.

 

교체 완료

 

 

기존 순정 휠셋보다 많이 건장해진 모습입니다.

 

무게 측정

 

 

음... 9.3kg -> 9.2kg이 되었습니다.... ㅎㅎ 

 앞휠뒷휠세트
DT SWISS R470db790g1030g1820g
AVIIAV ADEON 50760g920g1680g

공식 사이트의 1590g(±3%)과는 많이 차이가 납니다. 제 저울이 잘 맞지않는다고 생각하는게 낫겟죠 ㅎㅎ

오차범위 밖이라 그냥 순정휠과 어느정도 차이난다 정도로 참고 해주시면 될거같습니다. 

저도 포스팅을 쓰면서 생각보다 많이 차이가 나서 놀랍네요.

 

 

총평

- 들인돈에 비해 감량이 적어서 뭔가 아쉽다.(보통)

- 대신 자전거가 훨씬 예뻐졌다.(만족)

- 라쳇소리가 매우커졌다.(만족)

 

이글은 안드로이드 오픈소스 프로젝트의 코드 다운로드를 기록합니다.



OS Env.


  • Ubuntu 16.04 LTS
  •  Android 6.0 버전의 권장 요구사항은 Ubuntu 14.04 LTS버전 입니다.

  • Clean한 OS상태에서 Android P AOSP 코드를 다운로드 하는 과정을 기술합니다.

  • 반드시 디스크 용량을 확인해주세요 100G 정도 여유를 두시는게 좋습니다.



Java Version 확인

  • $ java -version

  • java 미설치 상태 입니다. 설치를 진행합니다.


Java 설치

$ sudo apt-get update

apt-get repo를 업데이트 해줍니다.

  • $ sudo apt-get install openjdk-8-jdk

  • jdk 를 설치해 줍니다. 


  • $ java -version

  • 설치 완료


다운로드에 필요한 패키지 설치



  • $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip



  • $ curl  curl https://storage.googleapis.com/git-repo-downloads/repo > ~/repo

  • $ chmod a+x ~/repo

  • $ sudo mv ~/repo /usr/local/bin/


Code 다운로드



  • 폴더 생성후 해당위치에서 코드 다운로드 요청

  • $ repo init -u https://android.googlesource.com/platform/manifest -b android-p-preview-2

  • $ repo sync
  • -b 옵션 이후 aosp 브랜치 명 작성 현재는 안드로이드 P 프리뷰 브랜치 입니다. 
  • 해당 커맨드 이후 시간이 오래 소요됩니다.



  • P완료된 모습. (부득이하게 다른 PC 로  받게 되었습니다. 사실 용량이 부족해서 다른 PC로 받았습니다....)
  • 용량이 많이 필요하니 꼭 용량 확인후에 싱크 진행 해야 합니다. 



다음 포스팅 :  AOSP 빌드


'공부 > Android Framework' 카테고리의 다른 글

[AOSP] 안드로이드 프레임워크  (0) 2018.05.10

안드로이드 시스템의 개요는 다음과같이 구성된다.


Linux Kernel


  • 안드로이드는 오픈소스인 리눅스 커널위에 가상머신을 띄우고 해당 가상머신에서 어플리케이션을 구동하는식으로 동작한다.

  • 눅스의 코드 중 필요한 부분만 이용하여 안드로이드 구동에 이용한다.



HAL

  

  • Hardware Abstraction Layer의 약자로 해석하면 하드웨어 추상화 계층이다. 

  • 리눅스 커널에 기본적인 드라이버가 있다면, 실제 제조사에선 해당부분에 드라이버의 기능을 구현한다. 



Native Libraries

  

  • Android 는 가상머신 위에서 돌아가지만 하위계층, 기본적인 베이스는 리눅스 커널위 에서 동작하게된다.

  • 리눅스 커널은 C언어로 제작되어있으며 핵심적인 프로그램들은 해당부분의 계층에서 제공되어진다.

  • 또한  GNU C 인 glibc가 아닌 안드로이드용 경량화 라이브러리 libc를 이용해서 필요한 부분만 이용한다. 



Android Runtime

  

  • 안드로이드용 가상머신. 달빅 방식과 ART 방식의 VM으로 앱을 구동할수있게한다.



Android Framework

  

  • 안드로이드에서 제공하는 기능들을 제공해주는 Layer

  • 흔하게 가져다쓰는 Notification, Sound, Camera, Message, 등등 모든 기능을 제공해주는 부분  

  • 어플리케이션 단에서 중복해서 기능을 구현할필요없이 제공해주게 된다.


JDBC 연결중 오류 발생 ->SQLException: Communications link failure



원인 추측 

1. 리눅스 내 방화벽

2. 포트 불확실성( 해당 포트가 아닐수 있음)

3. IP필터링

4. 코드의 오류



해결책


1. iptables 를 통해 포트를 열어주었다. 


iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

iptables -A OUTPUT -p tcp --dport 3306 -j ACCEPT

iptables-save


mysql 의 포트 3306포트의 들어오는 포트와 나가는 포트를 열어주었다. 


연결시도 -> 실패



2.포트 확인

/etc/mysql/my.cnf 내의 중간정도 


port            = 3306


확인 결과 이상없음


3. IP필터링

/etc/mysql/my.cnf 내의 중간정도 

bind-address           = 127.0.0.1


내부에서만 접속되게 설정되어있었음.


#bind-address           = 127.0.0.1
 '#' 을 앞부분에 붙임으로써 주석처리 -> 모든 IP에서 접속가능



성공적으로 연결되었다. 


Singleton pattern (싱글톤 패턴)


싱글톤 패턴이란 디자인 패턴기법중 하나로 인스턴스를 하나만 만들어서 사용하는 기법이다. 


자바의 경우 static 변수와는 비슷하지만 클래스를 따로만들어 관리하게 된다. 


생성자를 접근제한자로 막아두고 생성을 불가능하게하여 static 변수같이 사용할수있다. 


싱글톤 패턴은 인스턴스를 하나만 만들고 재사용하게 한다. 


getter의경우 접근제한자가 public 으로 어느곳에서든 접근 가능하다. 



기본적인 싱글톤 패턴

1
2
3
4
5
6
7
8
9
public class Singleton {
    private static Singleton instance  = new Singleton();
    private Singleton()    {    
    }
    public static Singleton getSingleton()
    {
        return instance;
    }
}
cs




사용예


Singleton 클래스


1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton {
    private static Singleton instance  = new Singleton();
    int intA;
    String strB;
    private Singleton()    {    
    }
    public static Singleton getSingleton()
    {
        return instance;
    }
}
 
cs



TestClass (main 클래스)


1
2
3
4
5
6
7
8
9
10
11
public class TestClass {
    public static void main(String[] args) {
        Singleton inst1 = Singleton.getSingleton();
        inst1.intA = 10;
        inst1.strB = "HelloWorld!!";
 
        Singleton inst2 = Singleton.getSingleton();
        System.out.println(inst2.intA);
        System.out.println(inst2.strB);
    }
}
cs



 결과







주의





싱글톤 패턴에 새로운 인스턴스를 생성할때 생성자의 접근제한자가 private이기 때문에 생성할수없다. 


getter를 이용하여 하나의 인스턴스에 접근하고 참조 변경한다. 





기본적인 싱글톤 패턴의 코드가 매우 간결하고 구현하기도쉽지만 사용하지않아도 한개의 인스턴스가 생성된다는 점이다.


작은 클래스의 경우 상관이없겟지만 클래스가 켜질경우 낭비가 발생하게 된다.



이에 낭비를 줄이기위해서는 synchronized 를 이용하여 구현할수있는데 프로그램에서 한번도 호출하지않는다면

인스턴스가 생성되지않고 낭비를 막을수 있다 .

하지만 이 방법의 경우 synchronized를 이용하여 성능의 하락이 발생할수 있다. 



1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton {
    private static Singleton instance;
    private Singleton()    {    
    }
    public static synchronized Singleton getSingleton(){
        if(instance==null)
        {
            instance = new Singleton();
        }
        return instance;
    }
}
cs


실습1). 학생의 시험 성적을 입력 받아서 학점을 계산하는 스크립트를 작성하세요. 학점은 점수가 96-100:A+, 90-95:A0 , 86-89:B+, 80-85:B0, 76-79:C+, 70-75:C0, 66-69:D, 나머지는 F로 계산 . 그리고 100점이 넘는 점수는 So Big 메시지를 출력, 1점보다 적은 값이 들어오면 So small 이라는 메시지를 출력하고 스크립트를 종료하게 작성하시오. 



[root@localhost ~]# sh exam1.sh 

학생의 성적을 입력하세요 :78 

C+ 

[root@localhost ~]# sh exam1.sh 

학생의 성적을 입력하세요 :90

A0 




실습2). 학생으로부터 지역번호를 입력 받아서 지역명을 출력하는 스크립트를 작성하시오, 지역번호가 02:서울. 031:경기, 051:부산, 052:울산 .나머지는 Heaven으로 출력합니다. 단 지역번호가 0보다 작거나 100보다 크면 "Check Your number!!!" 메시지 출력 스크립트 를 종료하게 작성하시오.



[root@localhost ~]# sh exam2.sh 

지역번호를 입력하세요 : 031 

경기 

[root@localhost ~]# sh exam2.sh 

지역번호를 입력하세요 : 051 

부산




실습3). 사용자에게 원하는 단 수를 입력 받아 해당 단 수의 구구단을 출력 한 후 "Retry? y|Y : " 메시지를 보인 후 y를 누르면 다시 원하는 단수를 입력받아 출력하게 하고 만약 다른 문자를 누르면 종료하는 스크립트를 작성하시오. 



[root@localhost ~]# sh exam3.sh 

단수를 입력하세요 : 3 

3 X 1 = 3 

3 X 2 = 6 

3 X 3 = 9 

3 X 4 = 12 

3 X 5 = 15 

3 X 6 = 18 

3 X 7 = 21 

3 X 8 = 24 

3 X 9 = 27 

Retry? Y |y :y 

단수를 입력하세요 : 5 

5 X 1 = 5 

5 X 2 = 10 

5 X 3 = 15 

5 X 4 = 20 

5 X 5 = 25 

5 X 6 = 30 

5 X 7 = 35

5 X 8 = 40 

5 X 9 = 45




실습4). 아래와 같이 구구단을 출력하는 스크립트를 작성하시오. 



[root@localhost ~]# sh gugudan.sh 

2 X 1 = 2 3 X 1 = 3 ............. 


9 X 1 = 9 2 X 9 =18 3 X 9 =27 ............. 9 X 9 =81



https://www.acmicpc.net/problem/11052


강남역에서 붕어빵 장사를 하고 있는 해빈이는 지금 붕어빵이 N개 남았다.

해빈이는 적절히 붕어빵 세트 메뉴를 구성해서 붕어빵을 팔아서 얻을 수 있는 수익을 최대로 만드려고 한다. 붕어빵 세트 메뉴는 붕어빵을 묶어서 파는 것을 의미하고, 세트 메뉴의 가격은 이미 정해져 있다.

붕어빵 i개로 이루어진 세트 메뉴의 가격은 Pi 원이다.

붕어빵이 4개 남아 있고, 1개 팔 때의 가격이 1, 2개는 5, 3개는 6, 4개는 7인 경우에 해빈이가 얻을 수 있는 최대 수익은 10원이다. 2개, 2개로 붕어빵을 팔면 되기 때문이다.

1개 팔 때의 가격이 5, 2개는 2, 3개는 8, 4개는 10 인 경우에는 20이 된다. 1개, 1개, 1개, 1개로 붕어빵을 팔면 되기 때문이다.

마지막으로, 1개 팔 때의 가격이 3, 2개는 5, 3개는 15, 4개는 16인 경우에는 정답은 18이다. 붕어빵을 3개, 1개로 팔면 되기 때문이다.

세트 메뉴의 가격이 주어졌을 때, 해빈이가 얻을 수 있는 최대 수익을 구하는 프로그램을 작성하시오.

첫째 줄에 해빈이가 가지고 있는 붕어빵의 개수 N이 주어진다. (1 ≤ N ≤ 1,000)

둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

해빈이가 얻을 수 있는 최대 수익을 출력한다.



https://www.acmicpc.net/problem/1389


케빈 베이컨의 6단계 법칙에 의하면 지구에 있는 모든 사람들은 최대 6단계 이내에서 서로 아는 사람으로 연결될 수 있다. 케빈 베이컨 게임은 임의의 두 사람이 최소 몇 단계 만에 이어질 수 있는지 계산하는 게임이다.

예를 들면, 전혀 상관없을 것 같은 인하대학교의 이강호와 서강대학교의 민세희는 몇 단계만에 이어질 수 있을까?

천민호는 이강호와 같은 학교에 다니는 사이이다. 천민호와 최백준은 Baekjoon Online Judge를 통해 알게 되었다. 최백준과 김선영은 같이 Startlink를 창업했다. 김선영과 김도현은 같은 학교 동아리 소속이다. 김도현과 민세희는 같은 학교에 다니는 사이로 서로 알고 있다. 즉, 이강호-천민호-최백준-김선영-김도현-민세희 와 같이 5단계만 거치면 된다.

케빈 베이컨은 미국 헐리우드 영화배우들 끼리 케빈 베이컨 게임을 했을때 나오는 단계의 총 합이 가장 적은 사람이라고 한다.

오늘은 Baekjoon Online Judge의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람을 찾으려고 한다. 케빈 베이컨 수는 모든 사람과 케빈 베이컨 게임을 했을 때, 나오는 단계의 합이다.

예를 들어, BOJ의 유저가 5명이고, 1과 3, 1과 4, 2와 3, 3과 4, 4와 5가 친구인 경우를 생각해보자.

1은 2까지 3을 통해 2단계 만에, 3까지 1단계, 4까지 1단계, 5까지 4를 통해서 2단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 2+1+1+2 = 6이다.

2는 1까지 3을 통해서 2단계 만에, 3까지 1단계 만에, 4까지 3을 통해서 2단계 만에, 5까지 3과 4를 통해서 3단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 2+1+2+3 = 8이다.

3은 1까지 1단계, 2까지 1단계, 4까지 1단계, 5까지 4르 통해 2단계 만에 알 수 있다. 따라서, 케빈 베이컨의 수는 1+1+1+2 = 5이다.

4는 1까지 1단계, 2까지 3을 통해 2단계, 3까지 1단계, 5까지 1단계 만에 알 수 있다. 4의 케빈 베이컨의 수는 1+2+1+1 = 5가 된다.

마지막으로 5는 1까지 4를 통해 2단계, 2까지 4와 3을 통해 3단계, 3까지 4를 통해 2단계, 4까지 1단계 만에 알 수 있다. 5의 케빈 베이컨의 수는 2+3+2+1 = 8이다.

5명의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람은 3과 4이다.

BOJ 유저의 수와 친구 관계가 입력으로 주어졌을 때, 케빈 베이컨의 수가 가장 작은 사람을 구하는 프로그램을 작성하시오.


첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻이다. A와 B가 친구이면, B와 A도 친구이며, A와 B가 같은 경우는 없다. 친구 관계는 중복되어 들어올 수도 있으며, 친구가 한 명도 없는 사람은 없다.

첫째 줄에 BOJ의 유저 중에서 케빈 베이컨의 수가 가장 작은 사람을 출력한다. 그런 사람이 여러 명일 경우에는 번호가 가장 작은 사람을 출력한다.


입력예

5 5
1 3
1 4
4 5
4 3
3 2

출력예

3











+ Recent posts