Download

기본 설정

  • 기본적인 터미널 사용과 동일함
  • 단축키 별도로 확인 필요
  • 설정 파일 위치
    • %USER%\AppData\Local\Packages\Microsoft.WindowsTerminal_~~(임의문자인듯)\LocalState\settings.json

SSH 용 프로필 추가 방법

  • 설정 파일 내의 profiles 항목에 추가
  • 폰트가 깨질 경우 기본 폰트를 변경 (D2Coding 등으로)
    • 윈도우에 설치된 폰트여야 하는듯
  • commandline 으로 ssh 실행 추가
  • 추가한 개별 프로필 탭에 아이콘을 표시하고 싶은 경우 `icon` 옵션 추가
  • 참고 : https://gist.github.com/jmyoon4488/a5dab4a0c460d5824da10540c6f6686b
"profiles":
{
  "defaults":
  {
    // Put settings here that you want to apply to all profiles.
    // zsh 사용중 또는 한글이 깨질경우 폰트 변경
    "fontFace": "D2Coding"
  },
  "list":
  [
    {
      // Make changes here to the powershell.exe profile.
      "guid": "{RANDOM-UNIQUE-GUID}",
      "name": "Windows PowerShell",
      "commandline": "powershell.exe",
      "hidden": false
    },
    {
      // Make changes here to the cmd.exe profile.
      "guid": "{RANDOM-UNIQUE-GUID}",
      "name": "명령 프롬프트",
      "commandline": "cmd.exe",
      "hidden": false
    },
    ......
    {
      "guid": "{RANDOM-UNIQUE-GUID}",
      "hidden": false,
      "name": "for SSH",
      "icon": "{local image path or image url}",
      "commandline": "wsl ssh user@example.com"
    }
  ]
}

 

(지속적으로 추가 예정)

[OPEN SOURCE]

1. Captura

2. HyperLedger Fabric

3. cmder

4. DBeaver Community Edition

  • https://dbeaver.io/
  • 멀티 플랫폼 DB 접속 툴
  • 커뮤니티 버전만 무료
  • Free and Open Source (Apache 2.0)

5. Windows Terminal

 

 

 

 

'Programming > Open Source' 카테고리의 다른 글

Windows Terminal SSH용 프로필 추가  (0) 2020.05.24

Default Method 란

  • Interface 안에서 method 를 구현해놓아 상속받는 클래스에서 해당 method 를 따로 override 하지 않아도 된다.
  • 해당 Interface 를 상속받는 여러 클래스에서는 동일하게 동작하는 method 지만 하나의 클래스에서만 다르게 동작해야 할 경우
    Interface 내에서 default method 로 구현 후 다르게 동작할 클래스에서 override 하여 구현하면 된다.

JDK 내 예시

  • Collection.java (Interface)

      /**
       * Removes all of the elements of this collection that satisfy the given
       * predicate.  Errors or runtime exceptions thrown during iteration or by
       * the predicate are relayed to the caller.
       *
       * @implSpec
       * The default implementation traverses all elements of the collection using
       * its {@link #iterator}.  Each matching element is removed using
       * {@link Iterator#remove()}.  If the collection's iterator does not
       * support removal then an {@code UnsupportedOperationException} will be
       * thrown on the first matching element.
       *
       * @param filter a predicate which returns {@code true} for elements to be
       *        removed
       * @return {@code true} if any elements were removed
       * @throws NullPointerException if the specified filter is null
       * @throws UnsupportedOperationException if elements cannot be removed
       *         from this collection.  Implementations may throw this exception if a
       *         matching element cannot be removed or if, in general, removal is not
       *         supported.
       * @since 1.8
       */
      default boolean removeIf(Predicate<? super E> filter) {
          Objects.requireNonNull(filter);
          boolean removed = false;
          final Iterator<E> each = iterator();
          while (each.hasNext()) {
              if (filter.test(each.next())) {
                  each.remove();
                  removed = true;
              }
          }
          return removed;
      }
    
      /**
       * Creates a {@link Spliterator} over the elements in this collection.
       *
       * Implementations should document characteristic values reported by the
       * spliterator.  Such characteristic values are not required to be reported
       * if the spliterator reports {@link Spliterator#SIZED} and this collection
       * contains no elements.
       *
       * <p>The default implementation should be overridden by subclasses that
       * can return a more efficient spliterator.  In order to
       * preserve expected laziness behavior for the {@link #stream()} and
       * {@link #parallelStream()}} methods, spliterators should either have the
       * characteristic of {@code IMMUTABLE} or {@code CONCURRENT}, or be
       * <em><a href="Spliterator.html#binding">late-binding</a></em>.
       * If none of these is practical, the overriding class should describe the
       * spliterator's documented policy of binding and structural interference,
       * and should override the {@link #stream()} and {@link #parallelStream()}
       * methods to create streams using a {@code Supplier} of the spliterator,
       * as in:
       * <pre>{@code
       *     Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)
       * }</pre>
       * <p>These requirements ensure that streams produced by the
       * {@link #stream()} and {@link #parallelStream()} methods will reflect the
       * contents of the collection as of initiation of the terminal stream
       * operation.
       *
       * @implSpec
       * The default implementation creates a
       * <em><a href="Spliterator.html#binding">late-binding</a></em> spliterator
       * from the collections's {@code Iterator}.  The spliterator inherits the
       * <em>fail-fast</em> properties of the collection's iterator.
       * <p>
       * The created {@code Spliterator} reports {@link Spliterator#SIZED}.
       *
       * @implNote
       * The created {@code Spliterator} additionally reports
       * {@link Spliterator#SUBSIZED}.
       *
       * <p>If a spliterator covers no elements then the reporting of additional
       * characteristic values, beyond that of {@code SIZED} and {@code SUBSIZED},
       * does not aid clients to control, specialize or simplify computation.
       * However, this does enable shared use of an immutable and empty
       * spliterator instance (see {@link Spliterators#emptySpliterator()}) for
       * empty collections, and enables clients to determine if such a spliterator
       * covers no elements.
       *
       * @return a {@code Spliterator} over the elements in this collection
       * @since 1.8
       */
      @Override
      default Spliterator<E> spliterator() {
          return Spliterators.spliterator(this, 0);
      }
      default Stream<E> stream() {
          return StreamSupport.stream(spliterator(), false);
      }
      default Stream<E> parallelStream() {
          return StreamSupport.stream(spliterator(), true);
      }

VScode c++ 개발환경 설정

VScode 설치

https://code.visualstudio.com/download

플러그인 설치

작업폴더 추가

  • 작업폴더 생성 및 추가

WSL - 리눅스에서 GCC 컴파일러 설치

sudo apt-get update
sudo apt-get install build-essential gdb

whereis g++
whereis gdb

Visual code에서 compiler 지정

  • Ctrl + Shift + P -> C/C++: Edit Configuration (UI) 선택
  • 내 작업영역 폴더 선택
  • Configuration name (구성 이름)
    • win32 선택
  • Compiler path (컴파일러 경로)
    • /usr/bin/g++ 입력
  • IntelliSense mode (IntelliSense 모드)
    • gcc x64 선택

확장 플러그인으로 C++ 프로젝트 생성

  • 설치했던 Easy C++ Projects 확장 플러그인으로 CPP 프로젝트 생성
    • Ctrl + Shift + P -> Easy CPP/C++ : Create new C++ project
  • Compiler 지정
    • [WSL] Windows Subsystem for Linux
  • 완료 후 작업영역 안에 bin, include, lib, src 폴더 등등 프로젝트 환경이 만들어진 것을 확인

빌드 테스트

  • main.cpp 파일 확인 후 오픈한 다음 하단 상태바의 Build & Run 버튼으로 실행 확인

디버깅 및 환경 설정

  • c_cpp_properties.json

    {
      "configurations": [
          {
              "name": "Win32",
              "includePath": [
                  "${workspaceFolder}/**"
              ],
              "defines": [
                  "_DEBUG",
                  "UNICODE",
                  "_UNICODE"
              ],
              "compilerPath": "/usr/bin/g++",
              "cStandard": "c11",
              "cppStandard": "c++17",
              "intelliSenseMode": "gcc-x64"
          }
      ],
      "version": 4
    }
  • launch.json

    {
      "version": "0.2.0",
          "configurations": [
              {
                  "name": "(gdb) Launch",
                  "type": "cppdbg",
                  "request": "launch",
                  "program": "(작업폴더영역)/bin/main", // 빌드 완료 후 바이너리 파일이 생성되는 경로
                  "args": [""],
                  "stopAtEntry": true,
                  "cwd": "(작업폴더영역)", // 만든 작업영역 경로 (ex) /mnt/c/vscode/cpp_test
                  "environment": [],
                  "externalConsole": true,
                  "windows": {
                      "MIMode": "gdb",
                      "miDebuggerPath": "/usr/bin/gdb", // 위에서 설치한 gdb의 path, wsl 에서 whereis gdb 명령어로 확인 가능
                      "setupCommands": [
                          {
                              "description": "Enable pretty-printing for gdb",
                              "text": "-enable-pretty-printing",
                              "ignoreFailures": true
                          }
                      ]
                  },
                  "pipeTransport": {
                      "pipeCwd": "",
                      "pipeProgram": "c:\\windows\\sysnative\\bash.exe",
                      "pipeArgs": ["-c"],
                      "debuggerPath": "/usr/bin/gdb"
                  },
                  "sourceFileMap": {
                      "/mnt/c": "c:\\"  // 작업영역 폴더 위치 드라이브로 설정 (ex) D드라이브 -> "/mnt/d": "d:\\"
                  }
              }
          ]
      }
  • task.json

    {
      "version": "2.0.0",
      "tasks": [
          {
              "label": "Build C++ project",
              "type": "shell",
              "group": {
                  "kind": "build",
                  "isDefault": true
              },
              "command": "bash",
              "args": [
                  "-c",
                  "make"
              ]
          },
          {
              "label": "Build & run C++ project",
              "type": "shell",
              "group": {
                  "kind": "test",
                  "isDefault": true
              },
              "command": "bash",
              "args": [
                  "-c",
                  "make run"
              ]
          }
      ]
    }

'공부 > 프로그래밍' 카테고리의 다른 글

[React] 기본 공부  (0) 2018.12.04

스마트폰의 설정에서 앱 권한에 어느순간 추가하지 않은 Permission 이 표시되고 있을 때 (선택 권한)

  • AndroidManifest.xml 소스 상에서는 표시되는 권한과 관련된 설정값이 전혀 없음

    <uses-permission android:name="android.permission.INTERNET" />
    ...
  • 프로젝트를 빌드하면 추가한 의존성 및 라이브러리들까지 포함된 Merged Manifest 를 확인 할 수 있음

    • 경로 : app/build/outputs/logs/manifest-merger-debug-report.txt
    • 내용
        uses-permission#android.permission.~~~
        ADDED from [(library or dependency name)] /(~~~local path ~~~)/AndroidManifest.xml:15:5-71
    • 해당 경로의 AndroidManifest.xml 파일 내용을 확인해보면 표시되는 권한을 확인 할 수 있음.
    • 라이브러리 제거로 확인 후 대처.
  • 참고 : https://medium.com/glucosio-project/how-libraries-can-silently-add-permissions-to-your-android-app-620911d7de6c

MacOS 에 OpenJDK 설치 (HomeBrew 사용)

  • 다른 버전의 OpenJDK 설치하기

    $ brew tap AdoptOpenJDK/openjdk
    $ brew cask install {JDK버전}
  • 입력 가능한 JDK 버전 종류

    1. OpenJDK8 - adoptopenjdk8
    2. OpenJDK9 - adoptopenjdk9
    3. OpenJDK10 - adoptopenjdk10
    4. OpenJDK11 - adoptopenjdk11
  • 예시

    $ brew tap AdoptOpenJDK/openjdk
    $ brew cask install adoptopenjdk8

Android Kotlin 을 통한 개발

DAY1, SESSION5 Android Kotlin을 통한 개발 전략


  • 개발 전략

    • 기존 코드를 어떻게 전환하고 확장할 것인가?
    • 넌 어느 별에서 왔니? (코틀린 주요기술의 근원)
      • 람다와 함수형
      • 프로퍼티와 함수
      • 연산자 재정의
      • Method Extension
      • Pipe Filter Model
    • 자바에서 코틀린으로 변환 과정
      • 멤버 변수의 초기화
      • @Nullable 처리
      • 중펍 클래스 쪼개기
      • Optional(?.)최적화
    • 코드 효율화를 위한 툴킷 정의와 활용
      • 전역변수와 프로퍼티
      • 연산자 재정의
      • 고차함수 활용
    • 거버넌스의 필요성
    • 맺음말 : 어떤 프로그램이 될 것인가?
  • 기존 코드를 어떻게 전환하고 확장할 것인가?

    • 기존 코드를 어떻게 전환할 것인가?
      • 바뀌는 부분만이라도 변환해 가자?
      • 새로 짜는 부분만?
    • 컴퓨터 언어도 습관이다 -> 잘 안바뀐다
    • 헤어날 수 없는 자바
      • 자바 스타일의 코틀린 코드
      • 기존 자바 코드에서 호출이나 참조가 쉽지 않다.
    • ? 를 이용한 null 처리가 너무 많다.
    • ...........영상을 보자
    • 정적 호출, 클래스 안에 상수 입력 등..

  • 이후 코드 설명 너무 많음...

'공부 > 기본' 카테고리의 다른 글

'머티리얼 디자인' 영상 시청  (0) 2019.04.23
'UX 디자인 시작하기' 영상 시청  (0) 2019.04.23

mongoDB 설치 - CentOS 7

  • add mongoDB repository

    # vi /etc/yum.repos.d/mongodb.repo
    [mongodb-4.0]
    name=mongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64
    gpgchecl=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
  • install nginx

    # yum install -y mongodb-org
  • find mongodb config file

    # cat -n /usr/lib/systemd/system/mongod.service
    ...
    9 Environment="OPTIONS=-f /etc/mongod.conf"
    ...
  • start mongodb service

    # systemctl start mongod

'Programming > Server' 카테고리의 다른 글

[CentOS 7] Nginx 설치  (0) 2019.04.29
[Network] OSI 7계층  (0) 2019.04.03
[Linux] 자주 사용하는 명령어 (grep, find, exec, xargs, awk)  (1) 2019.02.26
[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14

Nginx 설치 - CentOS 7

  • add nginx repository

    # vi /etc/yum.repos.d/nginx.repo
    [nginx]
    name=Nginx Repository
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgchecl=0
    enabled=1
  • install nginx

    # yum install -y nginx
  • if not use 80 port, setting firewall and modify nginx conf file

    # firewall-cmd --permanent --zone=public --add-port=81/tcp
    # firewall-cmd --reload
    # firewall-cmd --list-ports
    ...
    # vi /etc/nginx/conf.d/default.conf
    ...
      listen 81;
    ...

'Programming > Server' 카테고리의 다른 글

[CentOS 7] mongoDB 설치  (0) 2019.04.29
[Network] OSI 7계층  (0) 2019.04.03
[Linux] 자주 사용하는 명령어 (grep, find, exec, xargs, awk)  (1) 2019.02.26
[Linux] nohup 사용  (0) 2019.02.01
[Ubuntu] AWS - Ubuntu locale 한글 변경  (0) 2019.01.14

머티리얼 디자인의 철학과 적용 사례

DAY1, SESSION4 Material Design의 철학과 적용 사례


  • 머티리얼 디자인을 왜 만들었을까?

    • 구글 디자인.. 너무 안좋았다...
    • UX, UI 에 대한 개념이 보편적이지 않았음
    • 2011년 holo 디자인으로 조금씩 개선됨
    • 구글에게 필요했던 것
      • 다양한 폼팩터와 서비스를 아우르는 일관된 디자인 시스템
      • 현대적이고 아름다운 디자인
      • 개발자가 이해하기 쉬운 디자인
  • 머티리얼 디자인의 등장

    • 생산자가 생각한 방식보다도...
    • 사용자는 스스로가 편한 패턴으로 사용한다.
    • 아날로그 고유 속성에 중점
      • 물리적 속성
      • 형태 변환
      • 움직임
      • 높이
      • 음영
      • 객체 간 계층 구조
  • 머티리얼 디자인의 중요 특징

    • 입체적 표면
    • 의미있는 모션
    • 인쇄물 같은
  • 다량의 우수한 머티리얼 디자인 앱이 등장


어려웠던 점

  • 부족한 엔지니어링 리소스

    • 제공되는 라이브러리의 한계
    • 디자인과 개발 프로세스 간의 연결이 자연스럽지 않음
  • 비주얼 표현의 제약

    • 나만의 개성을 표한하기가 어려움
    • 안드로이드 앱을 위한 디자인이라고 착각하기 쉬움(편견)
  • 새로운 머티리얼 디자인 둘러보기

    • 머티리얼 디자인 목표
      • 다양한 플랫폼에서 사용자에게 일관된 경험을 제공한다
      • Create
    • 머티리얼 디자인 주요 특징
      • 기존 3가지
      • 유연한 기반
      • 크로스 플랫폼
  • 머티리얼 디자인

    • 머티리얼 시스템
    • 머티리얼 파운데이션
      • 머티리얼 디자인의 기반
      • 좋은 디자인이란? 질문에 대한 머티리얼 디자인의 제안
        • Environment
        • Layout
        • Navigation
        • Collaboration
        • Typography
        • Iconography
        • Shape
        • Motion
        • Interaction
        • Communication
      • 높이와 그림자
        • Before
          • 너무 까다롭다
        • After
          • 좀더 유연하게 허용해 주자
        • 모든 표면은 높이 값을 갖는다
        • 높이는 계층을 표현할 수 있다
        • 같은 계층에 속한 아이템은 동일한 높이 값을 갖는다
        • 사용자가 서로 다른 높이 값을 구분 할 수 있도록 테두리나 그 회 다른 시각적 요소가 사용되어야 한다.
        • 허용하지 않는 예시
          • 시각적으로 서피스(계층적인 콘텐츠)를 구분할 수 없을 때
    • 머티리얼 가이드라인
  • 머티리얼 디자인 연구 사례 (프로토타이핑 앱)

    • 레시피 앱 - Basil
      • 메뉴 (새롭게 구성한 네비게이션 드로워)
  • 머티리얼 가이드라인

    • 이전보다 훨씬 유연해짐
    • Material Theming (더 큰 우산 - Material Theme)
    • 독창적인 디자인 가능
    • 컬러 테마 (하나의 색을 선택하면 그에 알맞는 계층 색을 맞춰줌?)
      • 컬러 시스템 (색 세트)
      • 컬러 접근성
    • Typography (글자체) : 한글 적용됨
    • Iconography (아이콘)
    • Motion (Animation)
      • 더 과장되고 독창스러운 애니메이션도 허용
    • Tools
      • Theme Editor
        • 디자인 개발
        • Sketch (?)
        • Sticker Sheet (?)
      • Gallery
        • 개발된 디자인 공유 및 협업
        • 검토, 개선, 업데이트, 히스토리
  • 새로운 Components

    • Bottom App Bar
    • Banner
    • Extended FAB (Floating Action Button)
    • Chips : 상단의 메뉴를 끄고 킬수 있도록
    • Image Lists
    • Text Fields
    • Backdrop
  • 안드로이드에서 Material Design Components 사용하기

    • Develop (github)
    • Dependencies
      • com.android.material ~
    • lib
      • Custom View + Custom Style
    • .......... 글로 요약이 힘들다.

'공부 > 기본' 카테고리의 다른 글

'Android Kotlin 을 통한 개발' 영상 시청  (0) 2019.05.14
'UX 디자인 시작하기' 영상 시청  (0) 2019.04.23

+ Recent posts