전체보기

반응형

 

 

 

MENS SPURS AWAY SHIRT 2019/20

 

공홈에서 25% 할인 중이라 마킹까지 해서 구매. 손흥민을 또 마킹할까 하다가 이미 있기도 하고 홈 유니폼에 하는게 좋겠다 싶어서 해리 케인으로 결정

 

 

18-19 어웨이는 디자인이 별로라 패스 했는데 이번 어웨이는 색감이 진한게 맘에 들었다. 보라와 남색의 색감도 잘 빠지게 나왔다. 근데 뭔가 이번 시즌은 어웨이 입고 뛴 경기를 별로 못 본 느낌이다. 왜인지 모르겠지만 지금 팀도 완전 난장판 상태인데 빨리 주전들 부상복귀해서 예전 경기력을 되찾았으면 하는 마음이다.

 

사이즈는 좀 루즈하게 입어보려고 L를 주문

기장은 약 75cm
가슴너비 약 55cm

엘리트와 비교했을 때 가슴 너비가 좀 더 큰 듯하다. 엘리트 L 사이즈는 아래 링크에서 확인

 

https://yonoo88.tistory.com/1303

 

19-20 토트넘 핫스퍼 엘리트(Elite) 베이퍼 매치 손흥민 유니폼 구매 사이즈 후기(17/18 스타디움 유니폼과의 비교)

19/20 토트넘 핫스퍼 베이퍼 매치를 구매해보았다 참고로 토트넘 핫스퍼 공홈에서는 ELITE 라는 이름으로 되어있는데 Vapor Match와 같은 제품이다 Mens Elite Spurs Home Shirt 2019/20 일단 받아본 느낌은 얇..

yonoo88.tistory.com

 

착샷

M 사이즈 보다는 여유있고 큰 느낌이 아닌 루즈한 느낌이 났다. 다음 시즌 어웨이 킷은 어떻게 나올지 궁금하다.

 

 

반응형
반응형

 

제품 상세 스펙과 원리는 공식사이트에서

http://abluestore.com/product/%EC%BB%A4%EB%B8%94%EC%B2%B4%EC%96%B4-%EB%B0%94%EB%A5%B8%EC%9E%90%EC%84%B8-%EA%B5%90%EC%A0%95%EC%9D%98%EC%9E%90/25/

 

에이블루 공식사이트

에이블루 EVENT - 커블체어 두개사면 하나 더 증정 + 최대 69% 추가할인

abluestore.com

 

코로나로 인해 재택근무를 하게 되었는데 책상은 좁아서 상 펴놓고 바닥에서 하다보니 허리가 자꾸 굽는 느낌이 있어 이것저것 찾아보다가 발견한 제품. 허리를 받쳐준다니 그나마 좀 낫지 않을까 라는 생각이 들었고 게다가 재택근무가 1주 더 연장되는 바람에 이 제품을 구매해보았다. 

 

의자에 뒀을 때 모습
딱 봐도 작아보임

의자에 앉으면 거의 3/4을 차지하면서 앉는 편인데 의자 면적보다 작게나왔다. 하지만 이게 당연한게 커블체어 단독 사용이 아닌 의자에 두고 사용하는게 주 목적이기 때문에 그럴려면 의자보다는 작은 사이즈로 나오는게 맞다. 

 

하지만 나는 좌식의자로 써보려고 샀기 때문에 바닥에 앉아보았다. 일단 제품 자체가 평평한 형태가 아니라 바닥에서 흔들림이 존재한다.

 

뒤뚱뒤뚱

 

그리고 등받이 각도가 90도 이상이 아니라 90도 이하라 안 쪽으로 기울어져 있다. 그래서 앉게 되면 허리를 눌러주게 되어 허리를 피게되는 그런 원리로 만들어져 있다. 즉 앉으면 허리를 밀어주는 원리

등에 기대면 바닥이 뜨게됨
양 옆으로도 뒤뚱거린다

이렇게 양 옆으로 뒤뚱거리게 만든 건 엉덩이는 고정된 상태로 양 옆으로 움직이면 척추가 휘게 되는데 바닥이 같이 움직이면 척추는 유지한채로 움직이게 만들기 위함이라고 한다.

이 의자를 기억하는가

도서관에 많이 있던 이 의자. 다리만 떼서 좌식으로도 사용해봤는데 이거보다 더 불편하면 불편했지 편한 느낌은 아닌 것 같다.

 

반나절 좌식으로 사용해본 결과 그렇게 편하지는 않았는데 중간 중간 허리펴주면서 기대기는 좋았다. 엉덩이를 뒤로 밀착해서 앉아야 되는데 그게 잘 안된다. 좀 더 사이즈가 크게 나왔으면 하는 아쉬움이 있다

 

요약 정리

1. 좌식용으로 쓰기에는 비추

- 그냥 좌식 의자를 사는게 낫다. 가격도 좌식의자가 더 저렴하다는게 함정

2. 의자에서 사용하는 걸 추천

- 하지만 비싼의자를 사면 이걸 쓸 일이 없다

3. 쿠션감은 거의 없다고 봐도 무방

- 쿠션이 있는데 몸무게로 누르면 푹신함은 거의 없다고 봐도 무방

4. 생각보다 높은 가격. 가성비 제품은 아님

 

판단은 개인 몫. 그래서 커블체어를 뒤로하고 새로운 좌식의자를 구매함. 가격도 더 저렴한 블루밍홈 조던 좌식의자

 

https://yonoo88.tistory.com/1364

 

블루밍홈 조던 좌식의자 구매 후기

커블체어에 만족하지 못하고 좌식의자를 다시 고르고 골라 조던 좌식의자를 구매하게 되었다. 고를 때 1. 굳이 비싼 건 필요없고 2만원대에서 선정 2. 등받이가 어느 정도 넓어야 한다 3. 커버 탈부착으로 세탁도..

yonoo88.tistory.com

반응형
반응형

 

SharedPreferences 사용법은 이분의 블로그를 보고 참고하였음

https://re-build.tistory.com/37

 

[Android] SharedPreferences 사용하기

이래저래 바쁘다는 핑계로 미루다가 오랜만에 포스팅을 하게 되었습니다. 벌써 새해가 밝았네요. 저만 시간이 빨리 가는 것처럼 느껴지는 건 아니겠죠? 모두 새해에는 좋은 일이 생겼으면 좋겠습니다. SharedPrefe..

re-build.tistory.com

앱을 쓰면 자주 보이는 로그인 정보 저장 기능을 구현한다. 

UI 는 다음과 같다

구현 목표는

  • 아이디와 암호를 체크박스 옵션으로 저장 유무를 결정한다.
  • 아이디와 암호를 따로 구분하지 않고 같이 저장함
  • 로그인시 아이디와 암호 둘 중 하나가 입력되지 않으면 "아이디/암호를 입력해주세요" 토스트메시지를 띄운다
  • 아이디/암호 입력 후 로그인 정보 기억하기 체크만 해도 정보가 저장된다.
  • 로그인 정보 기억하기를 체크하면 저장되고 해제하면 정보를 삭제한다

이런 동작을 하도록 구현

위 블로그를 참고하여 PreferenceManager를  만들어주고 MainActivity 이렇게 2개의 파일만 준비되어있으면 된다.

빨간 상자의 클래스는 필수 생성

 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:orientation="horizontal">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="로그인"
            android:id="@+id/parse"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="QR Scan"
            android:id="@+id/scanQR"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="자산목록"
            android:id="@+id/dbList"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/et_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:hint="사번" />

        <EditText
            android:id="@+id/et_pw"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPassword"
            android:hint="암호"/>

        <CheckBox
            android:id="@+id/cb_save"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="로그인 정보 기억하기" />

    </LinearLayout>

</RelativeLayout>

 

자세한 설명은 주석 참고

MainActivity.java

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private Button parsingBtn;
    private Button scanQRBtn;
    private Button ListBtn;
    private EditText et_id;
    private EditText et_pw;
    private CheckBox cb_save;
    String id,pw;
    private Context mContext;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this; // 이거 필수!

        parsingBtn = (Button) findViewById(R.id.parse);
        scanQRBtn = (Button) findViewById(R.id.scanQR);
        ListBtn = (Button) findViewById(R.id.dbList);
        et_id = (EditText) findViewById(R.id.et_id);
        et_pw = (EditText) findViewById(R.id.et_pw);
        cb_save = (CheckBox) findViewById(R.id.cb_save);
        
        
        boolean boo = PreferenceManager.getBoolean(mContext,"check"); //로그인 정보 기억하기 체크 유무 확인
        if(boo){ // 체크가 되어있다면 아래 코드를 수행
            //저장된 아이디와 암호를 가져와 셋팅한다.
            et_id.setText(PreferenceManager.getString(mContext, "id")); 
            et_pw.setText(PreferenceManager.getString(mContext, "pw"));
            cb_save.setChecked(true); //체크박스는 여전히 체크 표시 하도록 셋팅
        }

        parsingBtn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){ //로그인 버튼 눌렀을 때 동작
                //아이디 암호 입력창에서 텍스트를 가져와 PreferenceManager에 저장함
                PreferenceManager.setString(mContext, "id", et_id.getText().toString()); //id라는 키값으로 저장
                PreferenceManager.setString(mContext, "pw", et_pw.getText().toString()); //pw라는 키값으로 저장
                
                Intent intent = new Intent(MainActivity.this, Parsing.class); //이건 없어도 무방
                // 저장한 키 값으로 저장된 아이디와 암호를 불러와 String 값에 저장
                String checkId = PreferenceManager.getString(mContext, "id"); 
                String checkPw = PreferenceManager.getString(mContext, "pw");
                //아이디와 암호가 비어있는 경우를 체크
                if (TextUtils.isEmpty(checkId) || TextUtils.isEmpty(checkPw)){
                    //아이디나 암호 둘 중 하나가 비어있으면 토스트메시지를 띄운다
                    Toast.makeText(MainActivity.this, "아이디/암호를 입력해주세요",
                            Toast.LENGTH_SHORT).show();
                }else { //둘 다 충족하면 다음 동작을 구현해놓음
                    intent.putExtra("id",checkId);
                    intent.putExtra("pw",checkPw);
                    startActivity(intent);
                }
            }
        });

        //로그인 기억하기 체크박스 유무에 따른 동작 구현
        cb_save.setOnClickListener(new CheckBox.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (((CheckBox)v).isChecked()) { // 체크박스 체크 되어 있으면
                    //editText에서 아이디와 암호 가져와 PreferenceManager에 저장한다.
                    PreferenceManager.setString(mContext, "id", et_id.getText().toString()); //id 키값으로 저장
                    PreferenceManager.setString(mContext, "pw", et_pw.getText().toString()); //pw 키값으로 저장
                    PreferenceManager.setBoolean(mContext, "check", cb_save.isChecked()); //현재 체크박스 상태 값 저장
                } else { //체크박스가 해제되어있으면
                    PreferenceManager.setBoolean(mContext, "check", cb_save.isChecked()); //현재 체크박스 상태 값 저장
                    PreferenceManager.clear(mContext); //로그인 정보를 모두 날림
                }
            }
        }) ;


        scanQRBtn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                Intent intent = new Intent(MainActivity.this, ScanQR.class);
                startActivity(intent);
            }
        });

        ListBtn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
//                Intent intent = new Intent(MainActivity.this, DBHelper.class);
//                startActivity(intent);
            }
        });
    }
}

 

동작 별 코드를 설명하자면

1. 아이디와 암호를 입력 후 로그인 기억하기를 체크했을 때

이 코드가 동작하게 되어 PreferenceManager에 아이디와 암호가 각각 "id","pw"라는 키값으로 저장된다. 사용할 때는 getString에서 이 키값으로 불러와 사용하면 된다.

 

2. 로그인 기억하기가 체크된 상태로 앱을 종료하고 다시 실행했을 때

        boolean boo = PreferenceManager.getBoolean(mContext,"check"); //로그인 정보 기억하기 체크 유무 확인
        if(boo){ // 체크가 되어있다면 아래 코드를 수행
            //저장된 아이디와 암호를 가져와 셋팅한다.
            et_id.setText(PreferenceManager.getString(mContext, "id"));
            et_pw.setText(PreferenceManager.getString(mContext, "pw"));
            cb_save.setChecked(true); //체크박스는 여전히 체크 표시 하도록 셋팅
        }

위 코드에서 로그인 정보 기억하기 체크 유무를 확인한다. 체크가 된 상태로 종료했기 때문에 boo는 true 가 나올 테고 저장되어 있던 "id","pw"키 값을 불러와 아이디,암호 입력창에 셋팅해놓는다.

 

3. 로그인 기억하기 체크를 해제했을 때

위 코드가 동작하여 현재 체크 해제 상태이므로 false를 PreferencerManager에 상태 값을 저장하고 저장된 로그인 정보를 clear 코드로 모두 날린다. 그럼 앱을 종료하고 다시 실행했을 때 입력창에 아무것도 입력되어있지 않는 상태로 나타난다.

 

구현 방법은 사용자마다 다르고 더 깔끔하고 단순하게 작성할 수도 있지만 동작만 된다면 끝. 더 건드렸다가 다시 미궁 속으로 빠지긴 싫다.

 

반응형
반응형

 

개인 간 거래를 통해 드디어 구매한 19-20 토트넘 트레이닝 쇼츠

 

Nike Tottenham Hotspur 2019/20 Dry Strike Shorts

 

 

공홈에 매진이 되어서 못 사고 있다가 가끔씩 재고가 들어오긴 했는데 원하는 사이즈는 들어오지를 않았다. 그리고 더욱 사려고 했던 것이 지퍼 주머니가 있다는 것. 

 

이로써 19-20 시즌 트레이닝은 모두 획득!

반응형
반응형

 

https://youtu.be/ghSMynBXnes

 

구매하고 얻은 마일리지

[프리미엄] [20TOTY 획득 기회] BP 꾸러미 (300만 ~ 3억 BP)

[20TOTY 획득 기회] BP 복 주머니 (50만 ~ 1억 BP)

2개까지 포함한 개봉기

 

BP 패키지치고는 잘 나온건지 못 나온건지 모르겠지만 성에 안차는 결과...

20토티 , 20 노미니라도 나와줄 줄 알았는데 ...

 

반응형
반응형

 

10인 트레이드 의뢰 - OVR 500+

 

https://youtu.be/QYYuvZFiSGw

블루 선수팩을 구매하여 시도하는 에이전트. 쿨타임 1시간 필요. 2월 한정 가능 에이전트

NG 업데이트 포함 70-90 선수팩을 모아서 한번에 까는 걸 추천. 왠지 1장씩 깔 때보다 확률적으로 잘 나오는 건 기분탓 일 수 있음.

 

에이전트 10회를 돌릴려면 총 100명이 필요. 블루 선수팩 100장은 50만BP. 웬만하면 손해 없는 장사를 할 수 있다. NG 시즌이 뜨면 더욱 금상첨화. 현재 3월에도 에이전트 진행중이며 19 챔스시즌이 포함되어 있음

선수팩 범위가 70-90 인데 3/5일 기준 19 챔스시즌 오버롤 90 선수들 탑 목록을 보면

최대 1.5억까지 획득 가능한 상태.

 

5인 BP트레이드 의뢰 - OVR 400+ 

 

https://youtu.be/4xazIeAui08

BP를 얻을 수 있는 에이전트. 총 오버롤 400 이상이면 가능하며 이를 위해 매물을 따로 구하기보다는 판수 이벤트 보상에서 나오는 선수들을 처분할 때 좋음. 또는 이적시장 50명이 다 찬 상태에서 사용하기 좋음.

 

"최소 150만BP 최대 1000만 BP 획득이 가능함"

 

이 에이전트의 핵심은 재물값 총 190만 이하로 맞춰야하며 80이상인 선수들을 3~4명 집어넣고 나머지 1~2명을 값싼 70대 선수들로 채워넣어야함. 그럼 190만 안팎으로 맞출 수가 있음

 

수수료 다 고려했을 때 재물 선수 190만 이하로 구성하면 손해가 전혀 없는 에이전트이다.

 

물론 결과가 아쉽지만.. 이 에이전트는 3월에도 현재 진행 중이며 1시간 쿨타임이 필요. 이왕이면 모아서 까는 걸 추천하며 몇번 더 해본 결과 750만 BP도 획득 가능했다.

 

 

데일리 ICON BP 트레이드 의뢰 - HOT시즌 OVR 280 이상

 

이건 그냥 선수팩 까서 나온 HOT시즌 처분겸 심심해서 해봤는데 생각보다 개이득

 

https://youtu.be/YruKgW50gmo

7천만 개이득

 

운이 좋았다..

 

반응형
반응형

 

Spurs Tottenham Hotspur 3D Stadium Puzzle

토트넘 핫스퍼 스타디움 3D 퍼즐을 구매해보았다. 30파운드 가격으로 약 5만원 정도

 

https://youtu.be/pRpOpZ-aRUw

 

https://youtu.be/XEceEMdWbE0

 

 

사이즈 정보

 

총 75조각으로 되어있으며 스티로폼? 재질로 되어있다.

 

 

처음 조립은 쉬웠다..
50%정도 완성된 모습

 

뚜껑이 없어도 경기장 느낌이 물씬 난다. 

 

 

경기장의 웅장함이 스멀스멀 느껴진다.

 

 

 

조립 후 부품 틀

 

 

 

나머지 경기장 지붕도 완성하여 조립 완성!

 

 

 

 

 

경기장 내부도 찍어보았다

 

겉으로는 보이지도 않는 내부에도 스크린 부품으로 디테일을 살린 모습
라커룸 들어가는 입구도 나름 디테일
화이트하트레인으로 부터 쭉 내려온 cockerel 동상까지

 

 

조립 후반부로 갈수록 부품을 끼우기 어려운 것들이 꽤 있었다. 사이즈가 맞지 않는 것 같아보이는 것도 있었고 홈이 안 맞는데 어떻게 하라는건지 의문스러운 것들도 있었지만 어찌어찌 끼우니 딱 맞았다. 끼우기가 힘들지 끼우기만 하면 다 맞는 사이즈들이었다. 

 

퀄리티는 뭐 나름 괜찮았고 잘 보관만 한다면 내구성 문제는 걱정 없을 것 같다. 맨유는 올드트래포드 경기장 레고도 나왔는데 토트넘도 나왔으면 더 좋았을 것 같다. 이 퍼즐로라도 대리 만족을 해야겠다

 

 

 

 

 아크릴 재단을 주문하여 케이스까지 완료!! 깔끔하게 전시를 해두었다

 

반응형
반응형

 

우산도 고장났겠다 호기심에 한번 구매해본 토트넘 우산. 가격은 2만원

 

우산 커버에 새겨진 토트넘 핫스퍼
뭔가 좀 저렴한 티가 남
우산 띠는 찍찍이로 되어있다

 

 

 

 

손잡이 모습
펼친 모습

 

여기서 좀 느낀게 우산 재질이 얇아서 밖에 사물이 비칠 정도이다. 음.. 내구성은 좋지 않을 듯한 모습이다. 뭐 물만 안새면 되지..

 

 

우산 살 모습

 

막 바람에 끄덕없을 정도의 내구성을 기대하진 않는다. 그냥 항상 가방에 들고 다니면서 급할 때 쓰고 다니는 정도니..

 

 

 

 

보면 우산 재질이 얇아서 그런지 구김이 많은 편. 좀 비싼 우산 보면 재질도 두껍고 짱짱해서 펼치면 펄럭~ 느낌이 나는데 이건 비닐이 펴지는 바스락? 느낌의 소리가 난다. 접을 때도 접힌 자국 그대로 자연스럽게 접혀야 하는데 이거는 접을 때 구김이 좀 있어서 손이 많이 간다. 그리고 비오는 날 우산을 사용해보았따.

보이는가..
그냥 비를 막아주는 정도의 방수력

 

보통 새우산은 비를 맞으면 빗물이 송글송글 맺혀서 주르륵 떨어지게 되는데 이거는 빗물이 맺히진 않고 그냥 젖는 느낌이다. 그래서 우산을 털면 빗물이 대부분 털리지 않고 남아 있는다. 한마디로 싸구려 우산 재질이라는 것. 다이소 5천원 짜리 우산을 써보진 않았는지만 그와 동급인 성능이라고 본다. 비를 막아주는 우산 본연의 기능에 충실함

 

솔직히 나이키 제품 말고 이런 토트넘 자체 제작 상품들 퀄리티는 좀 높혀야 된다고 본다.

 

장점

- 유니크함

- 토트넘 팬 인증

 

단점

- 방수력 낮음

- 우산의 원단 저퀄리티

- 우산 뼈대도 튼튼한 느낌은 아님

 

 

반응형

+ Recent posts