[독서계획]

2020년 5월 독서계획 1권


지난주는 바빠서 2권을 못봐서 이번달로 이월된 관계로 이번달은 1권만 주문했습니다.

바쁜게 좋은거겠죠 ㅎㅎ 

 

1. 타인의 해석

 - 선택 이유 :

   > 지난달 구입했던 심리학 관련책과 잘 어울리게 볼 수 있을것 같아서 선택했습니다.

 - 읽기 전 느낌

   > 타인을 더 잘 안다는건 어떤느낌일지

 

-기타

책구입은 항상 반x앤루x스에서만 하고 있는데 멤버십이 있었다는걸 처음알았네요.

(고딩때부터 책은 반x앤루x스만 고집해왔네요. - 특별히 그렇다는거뿐이지 책은 항상 제 개인돈으로 지출하여 구입하기에 광고는 절대 아닙니다!!)

자잘자잘하게 사는지라 높은등급은 아니지만, 일반 등급에서 실버루니 라는 등급으로 올라가 있었습니다.

멤버십할인쿠폰 11%라고하니 이번달은 1권사느라 사용은 못했지만, 담달에는 적용해서 구입해봐야겠습니다.


[Kotlin]Toast 사용하기


간혹 유저에게 간단한 메세지를 전달해주기위해 Toast를 사용하는 경우가 있습니다.

이런 경우를 위해 Kotlin에서의 Toast 사용법을 알아보겠습니다.

 

- 기본 형태

Toast.makeText(context, text, duration).show()

 > context(Context)는 현재 Activity의 context를 전달해주시면 되며,

 > text(String)는 Toast에 띄우고 싶은 String형식의 text를,

 > duration(Int)은 Toast를 얼마나 긴 혹은 짧은 시간동안 보이게하고 싶은지를 의미합니다.

 > duration의 경우 Toast.LENGTH_SHORT 및 Toast.LENGTH_LONG을 사용할 수 있으며 각각 0과 1로 대치됩니다. (즉, 0 혹은 1로 넣어도 동작)

 > SHORT는 4000ms(4초), LONG은 7000ms(7초) 입니다.

 

 > *makeText 후 show를 사용하지 않으면 Toast는 보이지 않습니다.

 

 - 예시

Toast.makeText(this, "토스트 테스트_짧게", Toast.LENGTH_SHORT).show()
Toast.makeText(this, "토스트 테스트_길게", Toast.LENGTH_LONG).show()

위는 비교적 간단한 예시이며, duration부분의 SHORT와 LONG의 차이로 Toast를 짧은 시간 혹은 긴 시간동안 보이게 해주는 예시입니다.

 

 - 간단하게 함수를 이용하여 Text만 받아 사용하기

private fun shortToast(text:String) {
	Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
}

private fun longToast(text:String) {
	Toast.makeText(this, text, Toast.LENGTH_LONG).show()
}

 - 사용법 :

  shortToast("안녕! Karzin!")

  longToast("안녕! Karzin!")

 

 *** Reference : https://developer.android.com/reference/android/widget/Toast

 

Toast  |  Android 개발자  |  Android Developers

Toast public class Toast extends Object java.lang.Object    ↳ android.widget.Toast A toast is a view containing a quick little message for the user. The toast class helps you create and show those. When the view is shown to the user, appears as a floating

developer.android.com

 *** 소스에 문제가 있을 시 댓글달아주시면 최신화하도록 하겠습니다. 감사합니다.


[Kotlin]Activity 전체화면 처리


예전에는 뭔가 AndroidManifest.xml에서 android:theme의 설정을 조금 만져주면 되었던걸로 기억하는데(개발한지 오래되서 맞는지는..) 최근버전에서는 많이 달라진것같네요.

 

전체화면모드가 생겨서 lean back, Immersive, sticky immersive라는 3가지 옵션으로 앱의 전체화면을 컨트롤하는 모양입니다.

 

private fun fullScreen(fullScreenOption : Int) {
  window.decorView.systemUiVisibility = (
    fullScreenOption
    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_FULLSCREEN )
}​

 - fullScreenOption은 전체화면의 옵션을 설정해주기위한겁니다.

 - Immersive, sticky immersive

 - Immersive 옵션 : View.SYSTEM_UI_FLAG_IMMERSIVE

 - sticky immersive 옵션 : View.SYSTEM_UI_IMMERSIVE_STICKY

 - 위 두 옵션은 상태표시줄이나, 탐색메뉴를 없애 전체화면으로 만들어주며, 필요시 아래나 위에서 스와이프 동작을 하면 상태표시줄과 탐색메뉴가 동시에 보이게 됩니다.

 - 다만 sticky immersive옵션을 주면 상태표시줄이나, 탐색메뉴가 불투명하게 보이며, 스와이프 후 일정시간이 지나면 다시 전체화면으로 돌아가지만, Immersive옵션의 경우 스와이프 후 상태표시줄과 탐색메뉴가 불투명하지 않고, 일정시간이 지나도 계속 존재함을 확인하실 수 있습니다. (촬영 등에 탐색이벤트를 사용할일이 적은 Activity에 적합해보입니다.)

 - 만일 lean back 옵션을 주고 싶다면, fullScreenOption 매개변수를 지워주시면 됩니다. (lean back 옵션의 경우 Activity를 터치하면 상태표시줄과 탐색메뉴가 나오게됩니다. - 유저가 동영상을 보다가 어떠한 탐색 이벤트 등을 발생하고 싶을때 적합한듯 보입니다.), 아래 예시 참조

private fun fullScreen() {
  window.decorView.systemUiVisibility = (
    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    or View.SYSTEM_UI_FLAG_FULLSCREEN )
}

 

 - 위 함수는 onWindowFocusChanged 함수안에서 실행해주면 됩니다. (아래 예제 참조)

override fun onWindowFocusChanged(hasFocus : Boolean) {
  super.onWindowFocusChanged(hasFocus)
  if(hasFocus) fullScreen(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
}​

 - onWindowFocusChanged함수는 Activity의 선택(Focus)여부를 확인하는 함수입니다. (override하여 사용하시면 됩니다.) 

 - Activity가 포커스 되면 fullScreen이 되는 형식입니다.

 - lean back 옵션의 경우 매개변수를 넘겨주지않으면 됩니다.

  >> fullScreen()

 

 *** Reference : https://developer.android.com/training/system-ui/immersive?hl=ko

 

전체 화면 모드 사용 설정  |  Android 개발자  |  Android Developers

동영상, 게임, 이미지 갤러리, 책, 프레젠테이션 슬라이드 같은 콘텐츠를 이용하기에 최적의 환경은 전체 화면입니다. 이 페이지에서는 전체 화면에서 사용자를 콘텐츠에 더욱 몰입하게 하는 방법과 사용자가 앱을 실수로 종료하지 않도록 하는 방법을 설명합니다. 앱에 화면 공간을 최대한 활용하겠다는 단순한 이유로 전체 화면 모드를 사용 설정하려고 할 수 있습니다. 하지만 사용자가 알림 확인이나 즉흥적인 검색 등을 위해 얼마나 자주 앱을 시작하고 종료하는지 고려해야

developer.android.com

 *** 소스에 문제가 있을 시 댓글달아주시면 최신화하도록 하겠습니다. 감사합니다.

[독서 계획]

2020년 3월, 4월 독서계획 5권


요즘 너무 귀찮아서바빠서(진짜 바빴음 ㅠ) 못썼네요.

3월은 2월 26일날 구매했고, 4월은 3월 25일날 결제했었습니다. 너무 늦어졌네요.

 

3월

1. 마케팅 불변의 법칙 - 비즈니스맵

 - 선택 이유 :

   > 프로그래밍만 짜다보니 심심해서

 - 읽기 전 느낌

   > 생각보다 재미있을 것 같은?

 

2. 마케터의 문장 - 인플루엔셜

 - 선택 이유 :

   > 글쓰는 요령, 특히 마케팅에 대해서 배워보고 싶어서

 - 읽기 전 느낌 : 

   > 유익한 시간이 되기를..

 

3. 1년 안에 AI 빅데이터 전문가가 되는 법 - 반니

 - 선택 이유 :

   > AI관련 논문을 작성하다보니 한번쯤 읽어보면 괜찮겠다 싶어서 픽!

 - 읽기 전 느낌 :

   > 이제 AI하면 지긋지긋.. 재.밌.을.거 같.아.요.

 

4월

1. 심리학 진작 배울걸 그랬네 - 베이직북스

 - 선택 이유 :

   > 심리학 배우고 싶었었습니다.

 - 읽기 전 느낌 :

   > 생각보다 괜찮...나?????

 

2. 심리학을 만나 행복해졌다 - 미디어숲

 - 선택 이유 :

   > 심리학 배우고 싶었었습니다.2

 - 읽기 전 느낌 :

   > 정말 행복해졌는지 읽어봅시다.

 

바쁘다보니 4월 책은 아직 읽어보진 못했지만, 5월 책도 곧 구매할 예정입니다.

밀리더라도 사놔야 돈아깝다고 다 볼 것 같습니다. 안그럼 만날잠만 퍼질러잘것같습니다.작심삼일이 되어버릴 것 같네요. 노력해야겠습니다 ㅠㅠ

 

 


[Kotlin]안드로이드 권한 요청


 

 

권한요청은 JAVA 버전도 만들었었지만 이번에 개발하는 Kotlin(이하 코틀린)에서 사용할 권한 요청을 정리해 보았습니다. (JAVA는 추후에 다시)

 

1. JAVA와 동일하게 AndroidManifest.xml에서 권한을 요청할 permission을 지정해줍니다.

 예 ) <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

      //저장소 쓰기에 대한 권한 요청

2. PermissionCheck Class (아래 소스코드 참고)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    public fun permissionCheck() {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 - 첫번째 매개변수는 Activity를 넘겨받으며, 두번째 매개변수는 Array 즉, 권한요청할 permission의 배열을 받아옵니다.

 - permissionCheck 함수를 돌려주면 permission 배열내에서 권한승인이 되지않은 권한을 모드 failRequestPermissionList 로 담아줍니다. 담아준 결과는 Empty 즉, 빈값이 아니라면 권한을 요청하게됩니다.

 

3. 실행할 위치에 권한요청할 permission의 Array를 생성해주고(아래 requestPermissions), PermissionCheck 클래스의 permissionCheck 함수를 실행해줍니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  val permissionCheck = PermissionCheck(this, requestPermissions)
  permissionCheck.permissionCheck()
}

 

** 만일 permissionCheck 함수를 실행하지 않고 바로 실행하고 싶다면 init 활용 (아래 참조)

class PermissionCheck(val permissionActivity: Activity, val requirePermissions: Array<String>) {

    private val permissionRequestCode = 100

    //권한 체크용
    init {
        var failRequestPermissionList = ArrayList<String>()

        for(permission in  requirePermissions) {
            if(ContextCompat.checkSelfPermission(permissionActivity.applicationContext, permission) != PackageManager.PERMISSION_GRANTED) {
                failRequestPermissionList.add(permission)
            }
        }

        if(failRequestPermissionList.isNotEmpty()) {
            val array = arrayOfNulls<String>(failRequestPermissionList.size)
            ActivityCompat.requestPermissions(permissionActivity, failRequestPermissionList.toArray(array), permissionRequestCode)
        }
    }
}

 -> 사용시에는 아래처럼 PermissionCheck 클래스에 매개변수만 담아주면 권한체크가 실행됩니다.

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  var requestPermissions = arrayOf(
  Manifest.permission.WRITE_EXTERNAL_STORAGE
  )

  PermissionCheck(this, requestPermissions)
}

 

*** Reference : https://developer.android.com/training/permissions/requesting?hl=ko

*** 소스에 문제가 있을 시 댓글 달아주시면 최신화하도록하겠습니다.

 


[직구]알리에서 내돈주고 구입한 5GHz 지원 무선랜 사용 후기


요즘엔 2.4GHz, 5GHz 대역(듀얼밴드)을 지원하는 공유기가 부쩍 늘었습니다.

 

제가 사용중인 공유기 (iptime의 A-8004T) 또한 5GHz 대역을 지원하는데요(생긴게 공기청정기),

 

문제는 수신을 받을 무선랜에서도 이 5GHz 대역을 지원해줘야 이용이 가능하다는 점입니다.

 

그렇기에 5GHz 대역을 사용하기 위해서 검색을 해보니..

국내에서는 적어도 2만원 이상은 줘야 5GHz 대역을 지원한다는 점을 알 수 있었습니다.

(미리 말씀드리지만, 국내제품이 비싸다고(비싸다기 보다는 가격에 맞는 서비스를 받으실 수 있기에 값어치에 맞는 가격이라고 생각합니다!) 디스하려는건 절대 아니고, 가벼운 제 지갑 사정을 고려한겁니다ㅠㅠ!!  구입하려면 할 수도 있고, 조금만 여유되면 바로 구매했겠지만.. 저같은 신입/대학원생에겐 여러모로 빠뜻하니...)

 

* 참고 - 2.4GHz 대역폭의 WiFi와 5GHz 대역폭의 WiFi의 차이점

5GHz는 2.4GHz보다 대역폭이 넓기때문에 사용가능한 채널이 많아 전파간의 간섭이 적으며, 속도도 2.4GHz보단 빠르다고 생각하시면 될 것 같습니다.

다만, 벽이 많은 곳이나, 장애물이 많은 곳에서는 2.4GHz가 더 빠른경우가 있을 수 있기 때문에 안정성측면에서는 2.4GHz가 더 나을 수 있습니다.

조금의 예를 들어보자면 제가 생활하는 뻥뚫린 원룸같은곳에서는 5GHz를 사용하면 좋고, WiFi를 사용하실 공간의 벽이 두껍거나, 장애물이 많은 경우에는 안정성을 위해 2.4GHz를 사용하심이 좋을 듯 싶습니다. (상황에 맞춰서)

 

혹시 몰라서 알리를 통해 검색을 해보니..

6천원이면 배송비 포함 구매(!!!!!!!!)를 할 수 있다는걸 알게되었습니다. 

(1개를 살돈으로 2개를..)

 

그.래.서.

질렀습니다.

 

- 구매 사진은 아래부터

 

출처:Karzin / 촬영기기:갤럭시S8+

 

출처:Karzin / 촬영기기:갤럭시S8+

 

- 제품 상세

무선랜의 제조사는 Rocketek이며, 사용된 칩셋은 RTL8811CU이고 RTL8812와 같은 드라이버를 사용하고 있습니다.(install cd상으로)

 

속도는 윈도우10 기준으로 다운로드 80.86Mbps ~ 82.54Mbps/ 업로드 94.85Mbps ~ 94.94Mbps가 나옵니다. (WiFi-무선랜 간에 장애물이 없는 경우입니다.) * 사실상 인터넷 속도 기준이기 때문에 무선랜 속도는 조금 다를 수 있음을 미리 말씀드립니다. (이정도면 인터넷을 광랜-100Mbps 서비스를 이용중에 있어 유선-무선간에 큰 차이는 없을 것 같습니다.)

윈도우 제어판의 네트워크 연결의 속성을 살펴보면 속도가 433.3Mbps로 나오고는 있으나, 이는 기가인터넷으로 넘어가야 정확한 무선랜의 속도 측정이 가능할 것 같네요.

(공유기 상의 연결상태 또한 433/433Mbps로 나오고 있습니다.)

 

- 사용 후기

저의 경우 두번째 구입이고, 첫번째 구입 후 너무 맘에 들어서 두개째 잘 사용하고 있습니다.

 - 한개는 윈도우10 PC에서,

 - 한개는 리눅스(우분투 18.04버전)에서 사용중에 있습니다.

 

윈도우, 리눅스 둘 다 잘 사용중에 있으며,

윈도우는 설치가 필요없이 바로 사용이 가능하고(윈도우10 기준),

리눅스는 CD를 통하거나 사이트에서 드라이버를 구해 설치해야하는 것 같은데.....

 -> 아무래도 외국에서 건너온 CD는 이유 모르게 불안하여 따로 드라이버를 설치해서 사용중에 있습니다.

(설치방법은 추후에 업로드하겠습니다.)

 

첫번째 무선랜 구입 후 3개월 정도를 사용했으며, 이용상에 문제 없다 판단하여

다시 재 구입하였으며, 대략적인 배송기간은 1달정도 걸린 것 같습니다.

(그냥 맘 편히 놓고 기다리셔야합니다.)

 

- 평가

사실 6천원 버린단 생각으로 테스트해보자 구입했는데 생각보다 가격도 저렴하고, 가격대비 성능도 원하는만큼 뽑아내주는것 같아서(성능테스트는 해보진 않았습니다.) 굉장히 만족합니다.

(6천원 버리게되면 2만원짜리 무선랜 구입할 예정이었음.)

 

- 추천은?

저처럼 금전적으로 부족하지만 남는건 시간이다 싶으시다면 구입하시는걸 추천해드리고(한달도 더 걸린거같음),

금전적 여유가 되시거나, 당장 사용해야하기 때문에 기다릴 수 있는 시간이 부족하다 싶으시다면 국내 괜찮은 무선랜들 구입하시는걸 추천해드립니다.

물론 외국에서 건너온 물품이다보니 A/S는 포기하셔야하기때문에, A/S를 생각하신다면 제발 국내 제품들 구입하세요!!

비싼만큼 값어치 합니다!! (전자기기의 특성상 뽑기운도 있을 수 있으므로, 신중히 생각하셔서 구매하시기를 거듭 안내해드립니다. - 이런경우 교환신청을 하면 오며가며 몇 달 더 소요될 수 있는 부분도 잘 고려해 주세요!)

 -> 요약 : A/S, 시간여유, 서비스지원을 고려하신다면 국내 무선랜을 / 시간이 남아돌고 지갑사정이 안좋다면 제가 쓰는 무선랜을 고려해보셔도 괜찮습니다.

 

** 마지막으로 저의 경우 테스트용으로 개인장비에서 사용을 하고 있고, 작업들로 인해 비싼 무선랜을 구입해도 금방 고장날 우려가 있어서 고가의 장비(? 저에겐 2만원도 고가..)를 구입하지 못했을뿐이지, 일반적으로는 A/S도 되고, 오래 사용해도 문제 없는 국내 유명한 곳의 무선랜들을 구입하시기를 추천드립니다.

 


[독서 계획]

2020년 2월 두번째 4권


1. 언어의 온도 - 말글터

 - 장르 : 에세이

 - 선택 이유 :

   > 주변 지인 추천

 - 읽기 전 느낌

   > 괜찮다는 소리를 들었지만 직접 보지않으면...

 

2. 아주 작은 습관의 힘 - 비즈니스북스

 - 장르 : 자기능력계발

 - 선택 이유 :

   > 좋은, 그리고 더 나은 내가 되기위한 습관을 만들어보고 싶어서 픽! 했습니다.

 - 읽기 전 느낌 : 

   > 좋은습관이 생겼으면 좋겠네요.

 

3. 이 하늘 위에서 언제나 너를 기다리고 있어 - 노블엔진팝

 - 장르 : 라이트(NT)소설

 - 선택 이유 :

   > 금액이 살짝 아쉬운느낌이 들어 추가로 선택을 해본 책.

   > 평을 보니 나름 나쁘지 않아서 픽!

 - 읽기 전 느낌 :

   > 이런류의 소설을 읽어본적이 없어서 어떨진 모르겠네요!

 

4. 1일 1페이지. 세상에서 가장 짧은 교양 수업 365 - 위즈덤하우스

 - 장르 : 인문/교양/철학

 - 선택 이유 :

   > 지식을 쌓기위해

 - 읽기 전 느낌 :

   > 하루에 한페이지씩만 읽어야할까..?

 


[Windows] 업데이트 오류 해결 (0x80240fff)


 

노트북의 SSD를 새것으로 교체 후 시원한 마음으로 윈도우10을 설치를 하고 나니 업데이트 오류가 저를 반겼습니다.

 

 

위와 같이 0x80240fff 오류가 났을 때에는 [다시 시도] 버튼을 여러번 눌러도 해결이 되지 않으므로,

 

https://www.microsoft.com/ko-kr/software-download/windows10

 

Windows 10 다운로드

Windows 10용 ISO 파일을 다운로드한 경우, 해당 파일은 선택한 위치에 로컬로 저장됩니다.컴퓨터에 타사 DVD 굽기 프로그램이 설치되어 있으며 해당 프로그램을 사용하여 설치 DVD를 만들려는 경우, 파일이 저장된 위치로 이동하여 ISO 파일을 두 번 클릭하거나 마우스 오른쪽 단추를 클릭하고, 다른 프로그램으로 열기를 선택하여 선호하는 해당 DVD 굽기 소프트웨어를 선택하면 프로그램을 열 수 있습니다. Windows 디스크 이미지 버너를 사용하여

www.microsoft.com

 

위 링크를 타고 가셔서 화면에 보이는 [지금 업데이트] 버튼을 누르시면 파일을 하나 다운(Windows 10 업데이트 도우미)받게 됩니다.

 

 

다운로드 된 실행파일(Windows 10 업데이트 도우미)을 실행 하시고 업데이트를 시작합니다.

 

 

위 업데이트가 정상적으로 완료되면 남은 업데이트를 시작하실 수 있습니다.

 

+ Recent posts