티스토리 간만에... 2024.03.10

다운완료~실행.

정식버전 언제나오려나..

 

근데 나 러스트? 설치 안했는데...

아..?

Install Rustup 누르니, 알아서 설치해준다.

아는게 없으니.. 알아서 잘해주겠지

대충 저기 설치된거같고...

프론트도 러스트로 할 수 있단건지... 잘 모르겠네.. 당연히 안될거같..

백엔드 합한 모노레포 말하는걸까. 나중에 만들어봐야겠어.

 

러스트를 주피터 노트북에 사용해서 간단하게 돌려볼 수 있고.

https://pipln.medium.com/rust-%EB%A5%BC-jupyter-notebook-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-cd939324e23f

 

Rust를 Jupyter Notebook에서 사용

0. 사전 준비

pipln.medium.com

참고하길.

 

RustRover-EAP 는 젯브레인 새 인터페이스가 기본인가보다.

기본으로 깃 세팅도 해두나보네...

대충... src/main.rs 하나있고,

fn은 함수겠거니.

우측상단 초록 화살표나 눌러서 헬로 월드나 찍어보면...

잘되네.

이제 뭐해본다...(?)

..

터미널에 보니 rustup 이랑 cargo 가 추가된거같네

주피터나 설치하자.

에러나네...

버전이 높아서?

https://github.com/evcxr/evcxr/blob/main/evcxr_repl/README.md

리드미나 읽고..

저기 블로그 글과 명령어가 좀 다르지?

cargo install --locked evcxr_repl

--locked 가 붙었는데... 

설치가 되네?

다시 저 블로그 글 가서 따라하고...

...? conda 가 없네...

https://www.anaconda.com/download

드가서 설치...

아... 뭐가 설치하고나니 뭐가 ... (뭐가 많아)

다 꺼

conda create --name evcxr
conda activate evcxr
conda install jupyter
conda install -y -c conda-forge nb_conda_kernels
cargo install evcxr_jupyter
evcxr_jupyter --install
jupyter notebook

귀찮다고 ...걍 여기서 붙여넣으면?

중간중간에 y 눌러줘야한다.

뭐야 되네?

... 

이제 기본 문법이나 익혀볼까.

'몰라그거무서운거 > 알고모르고' 카테고리의 다른 글

week2 과제  (1) 2021.05.23
week 1 과제  (0) 2021.05.15
시, 공간 복잡도  (0) 2021.05.10

안망했으니 글써봐야지

'잡담' 카테고리의 다른 글

2021년 회고 (처음으로 쓰는...)  (0) 2021.12.31
시니어가 아니더라도 기술을 공부하고 나누는 이유  (0) 2021.12.18
7월까지 잠깐 잠수  (0) 2021.05.31
2021.05.07 메모  (0) 2021.05.07
2021.04.27 기록  (0) 2021.04.27

Self-hosted

구축 메모

- 키워드 : postgreSQL, kafka, sentry, docker, k8s, 또 뭐있나 clickhouse? 흠 -_-

뭐 이런게 있긴 해

... 읽어보자

음... https://clickhouse.com/docs/en/intro/

 

What Is ClickHouse? | ClickHouse Docs

ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).

clickhouse.com

 

https://github.com/sentry-kubernetes/charts

 

GitHub - sentry-kubernetes/charts: Easily deploy Sentry on your Kubernetes Cluster

Easily deploy Sentry on your Kubernetes Cluster. Contribute to sentry-kubernetes/charts development by creating an account on GitHub.

github.com

이런것도 보이고...

복잡하구나

 

--------------------------

설치 후 https 아니면 안되는 설정들이 있어서 인증서도 붙여야했고,

slack 앱 만들어서 알람연동까지 되는건 좋네 확실히

yarn set version berry 

까지만 해도 웹스톰은 잘 찾는데,

yarn add @yarnpkg/sdks -D
yarn dlx @yarnpkg/sdks vscode

까지 했는데도 모듈을 vscode에서 못찾는 경우가 발생한다
마음을 가다듬고 yarn cache clean --all ..

..

자... 베리로 3.2.1로 한번 해보자.. 까나린 안쓸거고

yarn set version berry 
yarn add typescript (4.7.4 깔림)
yarn dev (ts-node index.ts)

일단 yarn dev 로 실행하는 ts-node는 되는데 VSCODE 에서 import 패키지들을 인식을 못한다.

흠...시스템의 문젠가? VS코드를 날려볼까

남아도는게 시간이니

rm -rf .vscode
rm -rf /Library/Application Support/Code

-------------

다운 https://code.visualstudio.com/docs?dv=osx 하고 새로 실행하니 그대로인게

npm install 패키지는 잘 되는걸로 봐서 yarn 과 연결고리를 찾아야겠다.

yarn set version berry

yarn add typescript

yarn dlx @yarnpkg/sdks vscode

했는데 똑같이 못찾고...

이것도 해줬는데 아니고...

이것도 작업영역 버전 사용했는데... 아닌거같고

 

... 아

nested 하게 open 하면 작업영역 버전을 사용 못해서 못찾는 문제구나

이렇게 열지 말 것...

https://github.com/reyoucat/simple-yarn3

 

GitHub - reyoucat/simple-yarn3

Contribute to reyoucat/simple-yarn3 development by creating an account on GitHub.

github.com

 

---------- 2022/6/26 삽질----------

Q: tsdk 위치를 맞는게 뭘까 하고 바꿔도 인식 못함... 경로 설정을 별의 별 각종 패턴으로 먹였는데도 안먹음.

A: 근데 이렇게 해서 되어도 문제가 다른사람의 PC에서 동작 안할거니까... 포기하자 ^ㅁ^

++ 민상님이 트윗으로 알려주시길... 아직 미구현 https://twitter.com/minsangk/status/1540934024578732032

 

트위터에서 즐기는 Minsang Kim

“@RE_U_CAT 아하, nested 된 프로젝트의 상위를 기준으로 프로젝트를 열었을 때, 서브디렉토리에 있는 settings.json 을 읽지 못하는 문제였군요. 꽤 논의가 있긴한데 아직 구현이 안됐나봐요ㅎㅎ https:/

twitter.com

https://github.com/Microsoft/vscode/issues/32693

 

Monolithic structure, multiple project settings · Issue #32693 · microsoft/vscode

I was wondering if it is possible for VSCode to pick up on multiple .vscode/settings.json For instance if you are working in an monolithic environment with multiple smaller projects inside it, and ...

github.com

 

import yargs from 'yargs/yargs';
import { hideBin } from 'yargs/helpers';
import { lookItUp } from 'look-it-up';
import Dotenv from 'dotenv';
import fs from 'fs';
// https://fe-developers.kakaoent.com/2021/211125-create-12factor-app-with-nextjs/
// https://fe-developers.kakaoent.com/2022/220505-runtime-environment/
async function parseDotenv(appEnv) {
  // dotenv 파싱
  const envFilePath = await lookItUp(`.env.${appEnv}`);
  const parsedEnv = Dotenv.config({ path: envFilePath }).parsed || {};
  return parsedEnv;
}

async function copyEnv(appEnv) {
  // 파싱 대상 파일은 '.env'파일로 복사
  const envFilePath = await lookItUp(`.env.${appEnv}`);
  const dotenvFilePath = `${fs.realpathSync(process.cwd())}/.env`;
  fs.copyFileSync(envFilePath, dotenvFilePath);
}

function writeEnv(parsedEnv) {
  // 파싱 된 내용을 /public/__ENV.js에 출력
  const scriptFilePath = `${fs.realpathSync(process.cwd())}/public/__ENV.js`;
  fs.writeFileSync(scriptFilePath, `window.__ENV = ${JSON.stringify(parsedEnv)}`);
}

yargs(hideBin(process.argv))
  .command(
    'next-env',
    'Create Next.js runtime environment js',
    function builder(y) {
      return y.option('env', {
        alias: 'e',
        type: 'string',
        description: 'Environment name(ex: alpha, dev, staging, real)',
      });
    },
    async function handler(args) {
      const appEnv = args.e || args.env || 'dev';

      const parsedEnv = await parseDotenv(appEnv); // dotenv 파싱
      writeEnv(parsedEnv); // 환경 변수 스크립트 파일 생성
      await copyEnv(appEnv); // .env 파일 복사

      return parsedEnv;
    },
  )
  .parse();
"env:dev": "node dotenv.rollup.mjs next-env --env=${APP_ENV:-dev} && next dev",
"env:start": "node dotenv.rollup.mjs next-env -e ${APP_ENV:-dev} && next start"

 

빙빙돌아가기 싫으면

그래서 리액트가 뭔데? 라이브러리, 조합형. JSX문법을 씀. 컴포넌트 단위로 잘나눠야함

prpos 로 상위에서 하위로 내려줄수있음. 루트요소에 리턴해주는게 중요하군. 모듈단위로 잘 나눠야한다. Example 같은 컴포넌트 작성의 네이밍 규칙도 있고, 컴포지션(합성)의 개념이라는 것도 있다. 스타일이 중복되고 재사용되는걸 아 이렇게 표현하는구나. 다 비슷비슷하네 묶어주는걸 의미하는군 children 이란 예약어가 있어 와 이걸 이제알았어. props.children ...ㅠㅠ 어쩐지 여기저기서 말도안하고 쓰더라 .. 요즘은 모든 파일에 react import 하진 않는구나. 과거엔 reactCreateElement 같은것도 있었군. JSX 문법은 대안이었구나. 하지만 명시적으로는 import react 다 써주는게 좋군. 컴포넌트 파일 구성은 보자... 그냥 정리하는거네 체계적인 폴더구분이 중요. state. ... 선언적 접근법...  인터렉티브의 기본이라. 모듈로 이벤트 정의 상태변경의 핵심은 이벤트를 어떻게 전달하는냐겠지. on으로 시작하는 이벤트들이 JSX에 내장되어있어. 이게 중요하네. 함수를 컴포넌트에 바인딩하는것. 그럼 이벤트 리스너에 등록 된다. 이걸 헨들러 방식이구나. () 로 해버리면 실행되니 주의.(포인터로 전달됨) 함수 이름의 관례는 뭐시기핸들러(clickHandler) 프로젝트에 따라 알아서 할것. 클릭핸들러가 컴포넌트에 반영된것이 왜 적용이 안된걸까 DOM에? 리액트는 이런식으로 동작하지 않음... 펑션콜을 React에서 평가할 때 실행 순서가 다르구나. 그럼 어캐바꾸는데? ㅇㅇㅇ.. 재평가 되는 방법은 state를 쓰는거구나 그래서 아ㅏ아....... 어쩑지 트리거되지 않았군 그래서 ..useState 라는 훅을 쓰는거구만 그냥 썻더니 아휴... 재호출되도록 하는 좋은 친구ㅏ. 배열과 업데이트 함수가 순서대로 인자에 반환됨.  그래서 title, setTitle 썼던거구나. 뷰랑 다르네 ㅇㅇ.. 스벨트가 좋다. 아무튼 훅으로 관리한다는 개념이 저런거구나.. state를 다시 보네 여기서. ㅇㅋㅇㅋ.재평가됨. 평가는 예약인것이고 바로 바뀌지 않는다. UX에서는 후에 바뀌기때문에 반영되는 개념을 기억해. 재평가 되는 과정은 빠름. 키컨셉임. const로 쓰는 이유는 컴포넌트 인스턴스로 등록하기 때문인거같은디? 변경되지 말라고 하는거 아냐? ㅇㅇ.. 그렇네. 잘못건드릴수있으니 특정 컴포넌트에서만 재평가하라고. 다른곳에 영향받지말라고. 결론은 useState 훅에 상태를 잘 등록해두자. 그리고 초기상태를 추적하는 형태가 있으니, state 추적이 가능한거군. 상태값과 업데이트함수를 기억해! 자. 이건 또 여러가지 로 업데이트 될 수 있구나. 입력값을 위한 폼 모듈에 대해 export default 로 정의한다. (하나밖에없으니까 ㅇㅅㅇ) 폼 만드는건 기본적이고... 잘 분리해서 관리하면 좋다. 사용자 입력은 어찌 관리하나... onChange 같은걸로 하긴 하네. changeHandler 에는 자동으로 event 가 넘어와 편리하긴하구나.state 다중관리도 있는데.... 방법은 뭐 useState 여러번 쓰는거아닌가맞네ㅋㅋㅋ event.target.value 오랫만~  컴포넌트당 여러 상태를 가지는것은 좀 중요한듯... 근데 이 대신 쓰는 방법이 있다. 대안 대안 대안...같은개념으 반복되니 객체로 전달하면 한번에 된다. 아... 1키에 1벨류로 잘 관리하게 하려면 업데이트하지 않은 값은 수동으로 복사하는 구린 방법이 있는데, 아니면 스프레드연산자로 ...값을 잃어버리지 않게 채워주면 되네. *구려
흠...  좋은 방법의 이전 state에 의존하는 state 갱신은? function으로 이전 상태와 다음 상태를 업데이트하면서 얻는 방법이군.... prevState 개념이 이렇게 들어오는구나. 잘못된 스냅샷 상태를 손수 관리하는건 수동적일 수 있으니 함수로 작업하도록 하는게 좋다.

onSubmit에 핸들러 다는것도 있고...근데 이벤트가 쏴 지면 안되니까 .event.preventDefalut()로 만들어서 디폴트 시켜버리는구나. 쏘지말라고 ㅇㅇ.. 양방향바인딩~~~~ useState로 저장한 경우, 값을 초기화 하고 싶은데~ value를 초기화 하면 되겠지. 어... 어~ 무한루프 안빠지는구나... 의외네 ..  자. 부모에서 위로 올리는 방법. 끌올이랬지? 여기도 emit을 쓸까요? 글쎄요... .... . .... .... .. .. 아... 위에서 만들어준다음 아래로 내려서 거기서 리턴한다고? prpos로 핸들러에 담아 내려주고 값받아서 재정의한다. 으흥. 체인을 걸어서 또 위로 올려 app.js 까지 올릴 수 있긴하겠네. 관습은 on어ㅓㅉ구로 정한다. state 끌올~ (State up -lifting 이라 부르기도 함.) 아무튼 컴포넌트간에 직접적인 전달은 없긴함. 그치만 맨날 루트로 끌어오리진 않고 필요한 트리까지만 올리면 된다 'ㅅ' - 아... 사용자 지정으로 prpos 정해서 투방향 바인딩하는게 이 이래서 중요하군.

'프론트 > React' 카테고리의 다른 글

yarn berry + react +TS + Storybook init  (0) 2022.03.24
생각 메모(1)  (0) 2021.04.18
생각 메모(0)  (0) 2021.04.17
초보자 자습서(tutorial) 따라하다가  (0) 2021.03.21

cra 로 TS 프로젝트 만들고.

rm -rf node_modules

yarn set version berry

yarn install

 yarn --version

> 얀베리 3.2.0

1043  npx sb init --type react -f
...
 1047  npx sb@next automigrate
...

https://github.com/storybookjs/eslint-plugin-storybook#usage 참고 다 적용.

...
 1052  yarn add core-js
 1053  yarn storybook

---

         "@types/react": "^17.0.21",
         "@types/react-dom": "^17.0.9",
-        "autoprefixer": "^10.4.4",
+        "autoprefixer": "9.8.6",
         "babel-loader": "^8.2.2",
-        "babel-plugin-macros": "^3.1.0",
-        "babel-plugin-twin": "^1.0.2",
         "daisyui": "^2.11.0",
         "postcss": "^8.4.12",
         "react": "^17.0.2",
         "react-dom": "^17.0.2",
         "styled-components": "^5.3.1",
-        "tailwindcss": "^2.2.15",
+        "tailwindcss": "^3.0.23",
         "terser-webpack-plugin": "^5.3.1",
         "typescript": "^4.4.3",
         "webpack": "^5.53.0",
         "webpack-cli": "^4.8.0"
     },
     "devDependencies": {
+        "@mdx-js/react": "^1.6.22",
+        "@storybook/addon-actions": "^6.4.19",
+        "@storybook/addon-docs": "^6.4.19",
+        "@storybook/addon-essentials": "^6.4.19",
+        "@storybook/addon-links": "^6.4.19",
+        "@storybook/addon-postcss": "^2.0.0",
+        "@storybook/react": "^6.4.19",
+        "@storybook/testing-library": "^0.0.9",

autoprefixer 버전이 10버전에서 참조 패키지에 문제가 있어 9버전을..

+const tailwindcss = require('tailwindcss');
+
 module.exports = {
-    plugins: {
-        tailwindcss: {},
-        autoprefixer: {},
-    },
+    plugins: [
+        tailwindcss('./tailwind.config.js'),
+        require('autoprefixer'),
+    ]
 };
const path = require('path');
const path = require("path");
const tailwindcss = require("tailwindcss");


...

                {
                    test: /\.s?css$/,
                    loaders: [
                    // Loader for webpack to process CSS with PostCSS
                    {
                        loader: 'postcss-loader',
                        options: {
                            /* 
                                Enable Source Maps
                            */
                            sourceMap: true,
                            /*
                                Set postcss.config.js config path && ctx 
                            */
                            config: {
                                path: './.storybook/',
                            },
                        },
                    }],
                    include: path.resolve(__dirname, '../'),
                }

 

 

*끝.

'프론트 > React' 카테고리의 다른 글

react  (0) 2022.04.15
생각 메모(1)  (0) 2021.04.18
생각 메모(0)  (0) 2021.04.17
초보자 자습서(tutorial) 따라하다가  (0) 2021.03.21

캡쳐 소리 죽이려고

사용자 인터페이스 사운드 효과 재생을 끄면 알람도 안난다. 다시 켜두도록 하자.

'몰라그거무서운거 > 기타등등' 카테고리의 다른 글

Sentry 구축 메모  (0) 2022.08.17
PRISM Live Studio 마이크 입력 지우기  (0) 2021.05.05
OpenWhisk  (0) 2021.04.29
쿠베 메모  (0) 2021.04.26
Docker compose yml 작성시..  (0) 2021.04.12

후... 처음으로 회고라는걸 해보고, 적어본다. 1년간 많은 일들이 있긴 했는데... 특히나 우울한것이 많았던 것 같다.

  1. 친구의 죽음
    연초에 비보가 날아들었다. 2월 3월 계속 우울했던 것 같다.
    아직도 1년이 다 되어가지만 그때를 생각하면 정신이 없다.
    스트레스성으로 불안을 겪고, 모든것에 두려움을 느꼈던 것 같다.
    선택장애와 반대로 빠른선택을 하게 되었고, 무차별적으로 결정하고 과감하게 저지르고 던지는 패턴을 반복했다.
  2. 퇴사 전배
    사내에 이런 저런 윗선의 일들이 겹치면서, 집중적으로 성장할 수 없는 부담이 가중되었다.
    업무조차 전혀 생각하지 않은 방향들로 흘러갔고, 데이터 업무가 가중되면서 (1)과 더불어 스트레스가 높아졌다.
    프론트를 그렇게 하고 싶었는데, 잘 안되었던 것 같아 결국 옮기기로 결심했다.

    중간에 스타트업도 면접을 봤지만 조건에 충족할 수 있는 조건도 나오지 않았고, 현재 내 위치가 어느정도인지만 확인했다.
    너무 쓴 경험은... 내가 하고싶은 일은 내가 실력이 부족했으며, 별로 싫어 했던 일이 그래도 남들보다 어느정도 할 줄 아는 수준이었다. 문제는 해당 분야는 내 내면으로도 확실하게 재미가 없다 느끼고 있었고, 이쪽으로 경력을 쌓고싶은 마음이 없었다.
    절대로 프론트가 하고 싶다는 마음을 절실히 담아서 어필했고, 그 길을 열어준 현재 조직에 너무 감사하다.
  3. 어쩌다 다시 인프라 
    사람 사는 일이 쉽진 않다. 하고싶은것을 하고 살아간다면 얼마나 좋을까. 강단이 있다고 해야할까...
    사람들은 자신이 할 수 있는 일과 할 수 없는 일을 분명하게 표현하며, 결정을 내리는 사람들이 대부분이다.
    나도 그렇게 하고 싶기는 했는데 그럴 처지가 아니었다.
    아니. 그저 잠시 잊고싶었는지도 모른다.
    아무생각없이 일을 잡고 싶었는지도 모른다...

    뭐 살다보면 봄날도 오겠지 이런 생각이었나보다. 한달도 안되어 인수인계 해주고 떠나는 사람을 보면서...
    착잡한 마음보다, 이 사람도 나 처럼 가고싶은 길을 가게 되었구나. 하고 인정해주었고
    나 말고는 지금 딱 적절한 포지션이 없었기 때문에
    그렇게 또 다시 일을 했던 것 같다. 잘 하진 못했다. 객관적으로 많이 부족했다.
    나는 내가 늘 부족하다고 느낀다.

  4. 얼레벌레 제로 스터디
    운영하던 스터디는 다들 취업하고 각자 공부의 계기가 된 것 같아서 뿌듯하다. 그래도 줄곳 상담해 주시는분도 있고 가이드 해줄 수 있어 다행이라고 생각한다. 포기하지 않고 취업하신분들도 대단하고...
    가끔 만나긴 하는데, 잘 되어 만나는 것 만큼 좋은 일도 없다.
    덕분에 회 잘 얻어 먹었다.

전반적인 회고

- 멘탈도 바닥으로 치닫고, 정처없이 떠돌기만 한 것 같지만...앞으로 좋은 일들만 있을거라고 생각하자. 내년에는 내가 할 수 있는것이 무엇인지, 사람들에게 더 도움이 될 일은 무엇인지 찾을 수 있을거라고 본다.

많이 부족한건 알고있다. 늘 부족하다 늘 노력하고 있다.

매번 잊어버리지만 지속적으로 반복할 수 밖에 없는 내 자신을 보면서 또 이렇게 한번 메모를 하고... 고생했다.

고생했어.

 

'잡담' 카테고리의 다른 글

오. 티스토리 안망했네  (0) 2024.03.10
시니어가 아니더라도 기술을 공부하고 나누는 이유  (0) 2021.12.18
7월까지 잠깐 잠수  (0) 2021.05.31
2021.05.07 메모  (0) 2021.05.07
2021.04.27 기록  (0) 2021.04.27

'잡담' 카테고리의 다른 글

오. 티스토리 안망했네  (0) 2024.03.10
2021년 회고 (처음으로 쓰는...)  (0) 2021.12.31
7월까지 잠깐 잠수  (0) 2021.05.31
2021.05.07 메모  (0) 2021.05.07
2021.04.27 기록  (0) 2021.04.27

그러게 바쁘다 겨울왔네

....

바뻐...

'잡담' 카테고리의 다른 글

2021년 회고 (처음으로 쓰는...)  (0) 2021.12.31
시니어가 아니더라도 기술을 공부하고 나누는 이유  (0) 2021.12.18
2021.05.07 메모  (0) 2021.05.07
2021.04.27 기록  (0) 2021.04.27
2021.04.20. 고민  (0) 2021.04.20

link : https://github.com/devouring-algorithm-ds/algorithm-study-s2/tree/s2/week2/week2

 

devouring-algorithm-ds/algorithm-study-s2

기초 자료구조와 알고리즘 씹어먹기. Contribute to devouring-algorithm-ds/algorithm-study-s2 development by creating an account on GitHub.

github.com

 

냠냠 -_-;... 

+ 연결리스트의 내용을 공부하고 정리한다. 
  + 연결리스트의 정의와 성질
  + 연결 리스트의 종류
    + 단일 연결 리스트 (Singly Linked List)
    + 이중 연결 리스트 (Doubly Linked List)
    + 원형 연결 리스트 (Circular Linked List)
  + 배열과 연결리스트의 차이
    + 1) 임의 위치에 있는 원소에 접근 = `O(N)`
> 찾으러 가는것에 한세월...
    + 2) 임의 위치에 있는 원소를 변경 = `O(1)`
> 변경은 빠름.
    + 3) 원소를 끝에 추가 = `O(1)`
> 끝에 있는 것 추가라 
    + 4) 마지막 원소 제거 = `O(1)`
> 끝에 있는 건 빠르지
    + 5) 임의 위치에 원소 추가 = `O(n)`
    + 6) 임의 위치에 원소 제거 = `O(n)`
  + 이중 원형 (Doubly Circular) 연결리스트를 기반으로 기능 구현
    + 1) 임의 위치에 원소 추가: `insertAt(...)`
    + 2) 임의 위치의 원소 제거: `removeAt(...)`
+ 연결리스트 관련 문제를 Leetcode에서 풀고 github에 공유한다.
+ 파트너 조원의 코드를 리뷰한다.
+ 본인의 피드백을 확인하고 수정하여 github에 올린다.

 

'몰라그거무서운거 > 알고모르고' 카테고리의 다른 글

Rust 해볼까.. RustRover  (1) 2024.03.10
week 1 과제  (0) 2021.05.15
시, 공간 복잡도  (0) 2021.05.10

과제 README.MD https://github.com/devouring-algorithm-ds/algorithm-study-s2/tree/s2/week1/week1

 

devouring-algorithm-ds/algorithm-study-s2

기초 자료구조와 알고리즘 씹어먹기. Contribute to devouring-algorithm-ds/algorithm-study-s2 development by creating an account on GitHub.

github.com

### 개인
+ 배열의 내용을 공부하고 정리한다. 
  + 배열의 정의와 성질
    + 1) 임의 위치에 있는 원소에 접근 = `O(1)`
    + 2) 임의 위치에 있는 원소를 변경 = `O(1)`
    + 3) 원소를 끝에 추가 = `O(1)`
    + 4) 마지막 원소 제거 = `O(1)`
    + 5) 임의 위치에 원소 추가 = `O(n)`
    + 6) 임의 위치에 원소 제거 = `O(n)`
  + 기능 구현
    + 1) 임의 위치에 원소 추가: `insertAt(...)`
    + 2) 임의 위치의 원소 제거: `removeAt(...)`

// 샘플 배열
const arr = [1, 2, 3, 4, 5]

const insertAt = function (targetArray, value, index) {
    // 입력할 배열, 입력할 내용, 입력할 인덱스 위치
    console.log('짱짱센,,, 인설트엣 친구를 동작합니다...')
    let preArr = []; // 앞 배열
    let postArr = []; // 뒷 배열 
    
    for (let i=0; i < targetArray.length; i++) { // 슬라이스 못쓰니까 열심히 잘라보자. O(n)
        index > i ? 
        preArr[i] = targetArray[i]
        : postArr[i] = targetArray[i] // 가독성 말아먹고
    }    
    // preArr.length; // 앞 배열의 길이가 나올것이다. 끝에다 추가한다. O(1)
    preArr[preArr.length] = value;
    
    
    const loofFunc = function (weight = 0) {
        for (let j=0; j < postArr.length + weight; j++) { // O(n)
            if (postArr[j + index] !== undefined) {
                preArr[j + index + 1] = postArr[j + index]
            }
        }
    }
    // index 0 용
    if (index === 0) {
        loofFunc();
        return preArr;
    } else if(index <= 0) {
        console.error('index에 음수넣지말자..')
        return []
    } else {
        // 리턴용 새 배열
        loofFunc(1);
        return preArr;
    }
    
}

// 삭제할 배열, 삭제할 인덱스 아까랑 비슷하겠지....
const removeAt = function (targetArray, removeIndex) {
    console.log('나약한 .. 리무브엣을 동작합니다..')
    // 리턴내용 그것이 삭제된 새 배열
    let preArr = []; // 앞 배열
    let postArr = []; // 뒷 배열 
    
    for (let i=0; i < targetArray.length; i++) { // 슬라이스 못쓰니까 열심히 잘라보자. O(n)
        // filter 안쓰고 하려니까 매우 어렵구나...
        if (removeIndex > i) {
            preArr[i] = targetArray[i]
        }
        else if (removeIndex < i) {
            postArr[i] = targetArray[i]
        }
    }
    
    for (let point = removeIndex; point < postArr.length; point++) {
        preArr[point] = postArr[point + 1]
    }
    preArr.length = preArr.length - 1

    return preArr;
}

const insertArr = insertAt(arr, 8, 4);
const removeArr = removeAt(arr, 0);
console.log('=======0ㅅ0======\n', insertArr, removeArr);

?

 

'몰라그거무서운거 > 알고모르고' 카테고리의 다른 글

Rust 해볼까.. RustRover  (1) 2024.03.10
week2 과제  (1) 2021.05.23
시, 공간 복잡도  (0) 2021.05.10

- 시간복잡도

얼마나 빨리 끝나느냐 - 작업을 위해서 책상에 판 벌려서 작업을 끝내는 시간

빅O 표기법으로 나타냄.

조용한 대회장에서 사람섞어놓고 샤우팅해서 이름 불러서 찾으면 O(1)

대회장에서 순차적으로 누가 누군지 물어서 찾으면 O(N), 즉시 찾으면 O(1)

대회장에서 가나다 순으로 쭉 서있으면 O(log N)

 

- 공간복잡도

얼마나 메모리를 많이 먹느냐 - 작업을 위해 책상에 판 벌리는데 얼마나 큰 책상님이 필요한가.

책상에도 가로 세로가 있듯 공간에도 고정공간과 가변공간이 있음.

* 메모리 제한이 512MB일 때 int 변수를 대략 1.2억개 정도 선언할 수 있다 정도 이해하면 된다고

ref - blog.encrypted.gg/922

'몰라그거무서운거 > 알고모르고' 카테고리의 다른 글

Rust 해볼까.. RustRover  (1) 2024.03.10
week2 과제  (1) 2021.05.23
week 1 과제  (0) 2021.05.15

회사 내부 위키나, 개발문서 말고 외부에 잘 적는 사람들은 얼마나 많은 시간을 투자하는걸까.

...대단한사람들

 

'잡담' 카테고리의 다른 글

시니어가 아니더라도 기술을 공부하고 나누는 이유  (0) 2021.12.18
7월까지 잠깐 잠수  (0) 2021.05.31
2021.04.27 기록  (0) 2021.04.27
2021.04.20. 고민  (0) 2021.04.20
2021.04.04 기록  (0) 2021.04.04

설치 후 지웠는데 ...

mac 에서 midi 오디오 입력에 표시되어서 마이크보다 먼저 잡히게되는 문제가 있었음.

// sudo kextunload /Library/Extensions/PRISM\ Live\ Studio\ SoundDriver.kext

어??? .... 재부팅하니까 다시 살아나네 ㅠㅠㅠㅠㅠ

1. Utility > terminal에서 해당 명령어를 복사하고 다시 한 번 삭제 작업을 진행합니다.
명령: 

sudo kextunload /Library/Extensions/PRISM\ Live\ Studio\ SoundDriver.kext



2. 명령어 입력하여 삭제 후 Finder에서 

/Library/Extensions/PRISM\ Live\ Studio\ SoundDriver.kext
목록을 찾아서 삭제합니다.

고마워요 고객센터

쿠베를 공부 하다보니, 오픈위스크라는 친구에 대해 듣게되었다. 유명한 아파치 프로젝트!
간단하게 말하자면 문제가 발생했을 때, 콜백이벤트를 실행해주기 좋은 서버리스 아키텍쳐이다.

github.com/apache/openwhisk/

 

apache/openwhisk

Apache OpenWhisk is an open source serverless cloud platform - apache/openwhisk

github.com

 

개인적으로 볼 때는 단순하게 함수단위로 iot에서 대문열기, 간단하게 디비 레코드 변경, IoT 센서등 조작 등등 작은이벤트 용으로 쓰면 아주 좋을 것 같고, 이것저것 연결해서 복잡하게 만들면 헬게이트를 맛볼 것으로 추정된다.

MSA에 더 MAS한 맛이라 가능하면 테스트 코드가 없어도 될 진짜 작은 사이즈의 작업을 할 때 써보자.

어... 집에 대문에 열렸을 때, 누가 문을 조작했나 하고 센서를 달아 놓았다면

notify-api.line.me/

 

LINE Notify

LINE Notify allows you to send web notifications from GitHub, IFTTT, Mackerel, and more directly to your LINE chats.

notify-bot.line.me

라인으로 간단하게 CURL로 쏜다던가. 하는걸 만들면 되겠다.

누가 또 그럼

docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html

 

AWS Lambda란 무엇입니까? - AWS Lambda

AWS Lambda란 무엇입니까? AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다. Lambda는 필요 시에만 코드를 실행하며, 하루에 몇 개의 요청에

docs.aws.amazon.com

얘랑 어떤게 나은가 할텐데

ㅋㅋㅋ 난 모르겠다.

아래 글 참고할 것

stackshare.io/stackups/apache-openwhisk-vs-aws-lambda-vs-serverless#posts

 

Apache OpenWhisk vs AWS Lambda vs Serverless | What are the differences?

Apache OpenWhisk - The best open-source serverless cloud platform, enterprise ready and accessible to all developers.. AWS Lambda - Automatically run code in response to modifications to objects in Amazon S3 buckets, messages in Kinesis streams, or updates

stackshare.io

끝.

샐리 생일임.

'잡담' 카테고리의 다른 글

7월까지 잠깐 잠수  (0) 2021.05.31
2021.05.07 메모  (0) 2021.05.07
2021.04.20. 고민  (0) 2021.04.20
2021.04.04 기록  (0) 2021.04.04
2021.04.03. 기록  (0) 2021.04.03

학습 중.

  •  
  • 호스트 - 컨테이너
  • 도커허브
  • 노드
  • 네임
  • 이미지
  • 클러스터 네크워크
  • 컨트롤러
    • 디플로이먼트
    • 스테이트풀셋
    • 잡 / 크론잡
    • 데몬셋
    • 레플리카셋
    • 레플리카컨트롤러
  • 리포티터리
    • 이미지
  • 디플로이먼트
    • 레플리카셋 
      • 스케일
    • 컨트롤러
    • HA구성
  •  팟
    • 매니페스트
    • 헬스체크 
    • 컨테이너
    • 초기화
    • 사이드카
    • 워크로더
    • 팟-컨테이너
    • 크론잡
  • 서비스 
    • 클러스터
    • 노드
    • 로드벨런서
    • 익스터널네임
  • 스토리지
    • 퍼시스턴트볼륨
    • 프로비저너 - 공간관리
  • 잉그레스
    • 세션어피니티
  • 큐베-킵얼라이브-빕(버추얼아이피)
    • 킵얼라이브
  • 오토스케일
    • HPA설정
    • 부하테스트
  • 클러스터 가상화
    • 네임스페이스
    • 시크릿 - 밑에거 고급진거
    • 컨피그맵 - 어 그 설정파일 이미지에 말아 넣으면 맨날 배포해야하니 빼두는거
  • 메모리관리
  • 시피유관리
  • 인증서관리

모던 JS 튜토리얼을 읽으면서 드는 생각 메모

오....... 자바스크립트 명세에는 셋타임아웃이랑 인터벌이 없다네? 오.... 아니 있는줄알았어.🙂

- setTimeout
: 일정 시간 후 호출함. 사용법은 간단함. 함수를 실행하지 말고 함수 자체를 넘길 것 이란 경고 정도와 id 반환해서 clearTimeout(타이머식별아이디) 정도로 스케쥴 관리 하는 것만 하면 될 것 같다.

setTimeout(sayHi, 1000, "인자", "인자2"); 

- setInterval
: 위랑 동일한 문법인데, 계속 반복하는가, 1회성인가 차이이다. (인터벌은 계속 반복),  clearInterval 할 때 까지 지속 반복하니 잘 쓸것.

- 중첩 setTimeout 
: 일정한 간격으로 실행하는 방법인데, 딜레이 증가 시킨 후에 성공하면 딜레이 초기화 하는것도 넣어주는게 좋다.
(뭐 별개 이야기로는 셋인터벌은 너무 작은 시간에 대해 반복되는경우, 반복카운터도 구현해야하고, 그게 근데 딱 잘라서 동작한다는 보장도 없기도하지만..하단에 그림으로 잘 설명 되어 있음.)

clear 하기 전까지 둘 다 메모리에 존재하는 것. 잊지않길.

- 대기시간이 0초인 setTimeout
: 🙂한국말로 써있는거 맞지? 즉시 실행 한 것 과 같은 효과를 내는 것 처럼 보인다고 어필하는 것 같아.
(실제론 0이 아니라 밀린다고 표현되고)

ko.javascript.info/event-loop

 

이벤트 루프와 매크로·마이크로태스크

 

ko.javascript.info

관련해서는 여기에서 더 알아볼 예정.

하단에 브라우저 환경에서 실제 대기시간은 0이 아니라는 부분은 "5번재 중첩 타이버 이후 대기시간을 4ms 로 강제" 하라는 부분이 명시되어 있어서인데, 그냥 넘어가도 된다. 구형브라우저 레거시 대응에 대한 것 때문에 명세변경을 못하고 있어서...🥺

- call/apply 데코레이터, 포워딩
: 재밌는 주제다. 데코레이팅 - 꾸며주고, 포워딩 - 이어주고
어떻게 하는지 알아본다고 한다.

- 코드 변경없이 캐싱 기능 추가하기
: 핵심은 코드 변경 없이 이다. 뭘까 좀 더 살펴보면 메모라이제이션과 흡사하다.

메모라이제이션이란?
-> 9 * 7 = 63인데 이걸 계속 반복 할 때 마다 9 를 7번 곱하고 하고 있으니, 63이란 결과를 어디 저장해놓고 key나 인자로 9, 7 이 들어오면 첨에 한번 계산했던걸 서랍에서 쨘 하고 꺼내주는 걸 말한다. (즐겨찾기, 북마크 비슷하다고 볼 수 있다.)

soooprmx.com/%eb%8d%b0%ec%bd%94%eb%a0%88%ec%9d%b4%ed%84%b0%eb%a5%bc-%ed%86%b5%ed%95%9c-memoization-2/

 

데코레이터를 통한 memoization · Wireframe

파이썬 데코레이터를 통한 memoization 피보나치 수열은 재귀 알고리듬의 대표적인 문제인데, 간단히 memoization을 통해서 성능을 개선하는 방법을 찾아보자. 테스트는 파이썬 3.4에서 진행했다. def fi

www.soooprmx.com

자세한건 위 블로그를 보고.. 파이썬이지면 알 듯? 

아무튼 본문에선 대충 8번째 줄에서 캐시라는 맵을 만드는게 핵심이다. 10부터 19번째 줄까지는 키를 찾아주고 캐싱결과 저장하는 그런것들을 설명을 열심히 하고 있고

call(), apply(), bind() 이 삼형제 기억날려나... 아 튜토리얼에서 했는지도 기억이 안난다. 딥다이브랑 헷갈려.

velog.io/@josworks27/%ED%95%A8%EC%88%98%ED%98%B8%EC%B6%9C-call-apply-bind-%EC%B0%A8%EC%9D%B4

 

함수 호출 call, apply, bind의 차이

함수 호출과 관련하여 지금까지 자주 쓰이지는 않았지만, 반드시 알아야 할 개념이 있다. 바로 call / apply / bind을 이용한 함수 호출 방법이다.자바스크립트에서 함수를 호출하는 방법에는 먼저,

velog.io

또 튀어나오는 남의 블로그 

- func.call 를 사용해 컨텍스트 지정하기
: 실행컨텍스트를 잘 생각해 보면 함수에서 worker.slow 를 받아서 func로 바꿔서 실행 하려고 해도 캐싱을 하려고 데코레이터를 만든 부분에서 func 자체의 this가 undefined 라고 표시하고 있다.
맞는 말인데 이렇게만 써두면 어 그런가보다 하고 넘어갈 수 있는데... 지금까지 잘 따라 온 사람들은 함수의 실행 위치에 따라 this 값이 바뀌는 부분을 생각 해 낼 수 있을거라 느낀다. - 근데 바로 아래 내려가면 설명 함 ... 아니 다음쪽 🔥
사라진 this 컨텍스트를 call을 통해서 원하는 범위로 고정할 수 있는 방법에 대해 설명을 하고 있다.

파랗게 선택 한 function (x) 


하단의 설명한 부분에 문제는 없는 것으로 생각 됨.

- 여러 인수 전달하기
: 캐싱데코레이터를 조금 더 가지고 놀아본다. 인자를 2개를 받는걸 만들어 보려고 하는데, 이 경우 중첩맵을 쓰거나, 키를 중복으로 쓰는 라이브러리를 쓰거나, 두 키를 합해서 하나의 키로 만들어 해싱함수로 만든다고 세가지에 대해 소개하면서 마지막걸 썼다.

- func.apply
: 아래 16줄 대신 쓸 수 있다고 한다.

스프레드로 args를 펴 발라 하나하나 분해해서 call에 넣어줬는데 apply를 쓰면 유사배열객체가 넘어가도 하나하나 분해해서 끄집어내 넣어주니 이 얼마나 좋은가. 하여 이것을 쓴다.

- 메서드 빌리기
: 앞에서 구현한 해싱을 개선해보자고 한다. args 대신 여러 인자를 받는 낡은 arguments 를 활용해서 해결하려 함. 유사객체배열에는 join이 없기 때문에, 이걸 사용하기 위해서 빈 array에서 join 메서드 call 을 통해 빌려 와 해결했다.

- 데코레이터와 함수 프로퍼티
: 음... 뭔가 주어를 살짝 빼먹고 하는 것 같아서 이해가 살짝 안되넹, 오리지널인이 되는 원본 함수에 func.calledCount 속성이 있으면, 중복된 친구인 데코레이터 속성은 감싼 래퍼이기 때문에 사용할 수 없는 그런 문제가 있나본데, 예시까지 들어서 slow 가 속성으로 있으면 데코레이터의 slow 는 래퍼라서 쓸수 없다는 소리같은데 확신을 못내리겠네... 뭔가 말을 장황하게 한 것 같은데 -_- 한국어 맞아?? 일어는 아예 해석을 포기했나 항목이 없고... 영어도 이상하고.. 일단 넘어가고 나중에 확신이 서면

- 함수바인딩
: 잃어버린 this를 찾아서... 맨날 사라지는 친구 어떻게 가져와서 잘 쓸지 고민될 때!
!!!여러분은 바인딩을 합니다!!! 라고 광고...

- 사라진 this 🥺
: 사라지는걸 구경 해보자.
사용자라고 유저 객체를 만들고, 프로퍼티로 퍼스트네임에는 존
메서드 (ES6 문법으로) 세이하이라는 친구를 만들어서 내부의 this로 유저 객체에 접근하게 한 후, 퍼스트네임을 찍어주는 친구를 만들었다.

자 일단 그래 열심히 만들었으니 확인해보면 언디파인드가 뜨니 당황스럽다.

함수 실행 위치를 잘 생각해서 user.sayHi가 window가 있는 전역에서 실행이 되었다.
sayHi 친구는 전역! 전역... global 에서 실행이 되었으니, 본문에서 말하는 부분인 window 에서 실행이 된 것이다.
sayHi는 global 에서 firstName을 찾기 시작하지만, 집(user 라는)안에 들어있는 firstName 을 불러도 찾을 수 없...

그래서 해결책이라고 제시하는데

- 방법 1: 래퍼
: 가장 간단하다고 한다. (당신으 ㅣ입장에서)
setTimeout을 사용해서 user를 받아 호출하기나 화살표 함수로 똑같이 구현 하는 등. 전역 렉시컬에서 벗어나게 하는 방법이다. 1000ms라는 1초의 시간 사이에 user의 firstName이 바뀔 수 있고, sayHi가 바뀔수도 있는 부분이다.
다른 사람을 부른다던가, 다른 내용을 동작하게 될 수 있다는것이다.

- 방법 2: bind
: 모든 함수는 this를 수정하게 해 주는 내장 메서드 bind가 있다고 함. - 간단하게  함수.bind(this로 지정할대상컨텍스트) 지정하면 해당 내용으로 지정 된 함수가 실행되게 된다고 한다. 리액트에서 class 문법으로 작업 시, 엄격모드가 적용되어 bind가 안되어 있는 경우가 있기도 한다.

- 부분적용
: 인수 바인딩을 이야기 하네. 사용법은 간단.
기본 this로 바인딩할 컨텍스트 부분을 bind(null, 뒤에 인수를 넣는다) 써본적 없는데 써봐야징.

- 컨텍스트 없는 부분 적용
: bind의 컨텍스트 null 같은게 아니라 아예 없는걸 하고 싶단건데, 헬퍼 함수 partial 을 만들어 주면 된다.

모던JS 튜토리얼 읽으면서 드는 생각 메모 6장의 마지막 메모.

- 화살표 함수 다시 살펴보기.🔁
: 짧고, 독특하고, 유용하다. 현재 컨텍스트를 잃어버리지 않는다.
(가장 스코프 체인 상의 가까운 컨텍스트에 쫄래쫄래 디스있니? 하고 놀러 가기 때문에)

- 화살표 함수에는 this 가 없다
: 두둥. 본문에서 접근하면 외부 값을 가져온다... 두두둥! forEach에 화살표 함수를 썼기에, 바깥의 group와 같아짐.
반대로 일반 function 을 쓰는 경우, 일반 함수 실행 컨텍스트에 따라 global 에서 찾게되고, title을 못찾거나 name을 찾게되면 엉뚱하게 빈값을 출력하는 모르는 경우 기가막힌 상황이 연출 될 수 있다.😭

기타 - 생성자가 없어서 new 불가(만들고 컨스트럭터 걸려있나 보던가..)
화살표 vs bind(this) - 바인드는 범위가 있고 화살표는 묶어서 한정짓지 않는다. 단지 this를 빌료와서 가장 가까운 스코프체인상 실행 컨텍스트에 가서 찾을 뿐.

- 화살표 함수엔 arguments가 없다.
: 응 없다. 새 문법이라서 미지원.


6장 끝

잡담을 너무 많이 안썼네, 간단한 생각은 글로 쓰는것보다 다른 SNS에 적는편이 좋아서 여기에 안남기는 편이다.

그래고 긴 고민들이 많이 있으니 적어보려고... 커리어라는건 대체 어떤건지 모르겠다. 실력을 평가하는 기준에 있어 남들이 요구하는 스킬을 맞춘다 하더라도 결국 연차가 쌓이고나면 남의 선택과 강요에 의해 만들어진 기술이다. 이것은 과연 내가 만족한 결과인가 고민하게 되었다. 하고싶은것은 무엇이었을까 다시 생각하고 고민하게 되었다.

스스로 결정하고 스스로 발걸음을 내딛고, 스스로 선택을 하고 갈 길을 알아본다는건 대단히 중요했다. 실패할 수 있는 두려움을 가지고 약간은 준비가 안되고 부족할지라도.. 위에서 남들이 요구한 스킬이었다면 이번엔 내 자신이 요구하는 스킬을 채워나갈 수 있다는 자신감으로 새로운곳에 문을 두드렸고 결과는 나쁘진 않았다. (스스로는 나쁜 것 같았는데...)

고민은 결론을 내려놓고 시간을 소비하는 과정 같다.

언제 시행할지... 정말 해도 될지...

그냥 두려워도 하는게 중요한 것 같다.

hello world 를 처음 찍어보는 것 처럼... 글 쓰고보니 아직 플러터 시작도 안했네 ^ㄴ^

'잡담' 카테고리의 다른 글

2021.05.07 메모  (0) 2021.05.07
2021.04.27 기록  (0) 2021.04.27
2021.04.04 기록  (0) 2021.04.04
2021.04.03. 기록  (0) 2021.04.03
2021.04.02 기록  (0) 2021.04.02

- 함수의 구분
: ES6 이전과 ES6 이후의 함수를 사용하는 목적과 몇가지 종류로 구분하는 이야기를 한다. 참... 과거엔 복잡했구나 싶다.
........ 그래서 ES6부터 크게 3개로 나눴구나...

화살표 함수 부족한 사람은 여기서 익혀가면 좋고... 생성자도 없고 프로토타입도 슈퍼도 agruments 도 없는 그런 슬픈 친구 하지만 깔끔한친구. 가장가까운곳에 척을 두고있는 친구... 언제나 생각하지만 얘 없었으면 코드 많이 너저분해지지 않았을까.(빌드기준) 뭐, 메서드의 부작용은 this 위치만 잘 알고 함수 생성 표현도 메서드쪽에 간단한 친구도 생겼으니 적재적소에 뭐든 잘 사용해야한다는 생각이 들었다. 

아 근데 이 앞장에 클래스에서 생성자 없이 쓰면 사파리는 왜 안되거지? 크롬 72 이하에서도 안되던데... 미구현이 확실한건지 뭐라고 딱 말을 못하겠는게 아직 안되는게 많나보네?
음... 이건 좀 더 상세하게 알아봐야겠는데 요즘 잠깐잠깐 이 책에서 듣는거 말고 시간이 별로 없군... 음 Rest 파라미터, 함수에 요즘 새로나온 (이건 좀 아닌가) 


급 회고 ???? 실은 읽는게 너무 느린거같아서 이 책 천페이지 넘는데 어느 세월에 하나하나 나눠서 읽고있어...
기존에 책 읽던 방식대로 훑고 넘어가고 아 전에 저기에 뭐가 있었는데 하고 인덱스 기억하는 식으로 해야겠다... 핵심적인 부분은 일단 차근차근 짚어서 넘어갔고, 이번달에 스스로 정한 CSS도 보는 진도율과 목표치에 부합하지 않으니 다시 기존 방식으로 돌아가야곘다. 하나 하나 짚어보고 생각하고 적자니 너무 오래걸렸다. 되풀이 하면서 생각해봐야지. ㅠㅠ

- static을 메서드명 앞에다가 잘못쓰면 에러도 안나고, 동작이 안되는 경우가 있네.. 아무래도 해당 클래스 내에서만 써야하는것 같은데 이렇게 잘못 제한을 잡아 막은 경우에는... 동작 안하는 건에 대해 어떻게 디버깅 하면 될까나... 흠~..... static 코드에서 안써야지.....에러로그로 안남네.
 - ref는 사용법이 뷰랑 비슷한듯.
- 리액트 공식 한글 문서 11장 12장 내용 왜이렇게 헷갈리게 써놓은건지 모르겠네
자습서에 틱택토 해보면 해결되고 이해할 수 있는 내용을 꼬아놓은 것 같다.
A는 B다 하면 되는데 A는 블라블라해서 와하니 B한걸 우리는 B라 하고, A' 라고 하는걸 그럼 이제 B' 라고 부를 수 있게 된거다. 라고 써둔거 같아서 보는데 너무 힘들었다. 공식문서는 뷰가 진짜 보기 편했다.

'프론트 > React' 카테고리의 다른 글

react  (0) 2022.04.15
yarn berry + react +TS + Storybook init  (0) 2022.03.24
생각 메모(0)  (0) 2021.04.17
초보자 자습서(tutorial) 따라하다가  (0) 2021.03.21

- 리액트에서 그럼 리플로우랑 리페인트(리드로우) 대신에 종합적인 리콘실리케이션(재조정 or 조화과정)으로 납득하고 넘어가면 되는것인가. 갈아끼우면 끝인가... 나는 헷갈린다 -ㅅ- ... render 함수가 대충 이전과 이후 컴포넌트 돔 트리 꼬라지를 보고 다른 부분이 있으면 그부분을 교체하는건 알겠는데... 복합이야 이거? 진짜? DOM 자체는 문제가 없는데 리페인트 할 때 어떤걸 하는진 까봐야하나..

아무튼 성능면에서는 다들 짱이니까 쓰고있겠지? 맨날 편하다고 뷰만 쓰다보니 거의 생각없이 코드짜곤 했네. 최적, 효율, 그런걸 만들었나보다. 하고 지금은 생각 중... (그래 그거 가상돔 그거, 뷰도 있는 그 가벼운 버춸돔 그거) 

- 아직 그리고 JSX가 익숙하지 않다. 한달쯤 지나면 익숙해질 수 있을까? 흠... 이제 곧 한달인데... -ㅅ- 책산걸 꺼내서 훑어보자.
옛방식을 쓰고있네... ㅠㅠㅠㅠ 전자책이면 전자내용도 업데이트 되면 좋겠다

Fragment 사용은 이렇게 하네. 요즘은 이렇게하네.

import React, {Fragment} from 'react';

코드 메모.

// static을 붙인 경우, render 외부에서 에러는 안나는데 해도 응답이 없음.
    handleClk = (() => {
        this.setState({
          oneTwoNum: this.state.oneTwoNum + 1
        })
    })

    // handleClk = () => {
    //     this.setState({
    //         oneTwoNum: this.state.oneTwoNum + 1
    //     })
    // }


    // handleClick() {
    //     this.setState({
    //         oneTwoNum: this.state.oneTwoNum + 1
    //     })
    // }

졸리다. ref.current 방식으로 쓰는게맞나.

class App extends React.Component {
    // ref 사용법 제대로 익히고 간다 진짜 ㅠㅠㅠㅠㅠㅠㅠㅠ 아오 
    scrollBoxRef = React.createRef();
    handleClick = () => {
        console.log('====배고파 ㅠㅠㅠㅠ')
        console.log(this.scrollBoxRef)
        console.log('====배고파 ㅠㅠㅠㅠ')

        this.scrollBoxRef.current.scrollToBottom();
    }
    render() {
        return (
            <div>
                <header className="App-header">
                    <img src={logo} className="App-logo" alt="logo" />
                    <ScrollBox ref={this.scrollBoxRef} />
                    <button onClick={this.handleClick} >
                                 아래로
                             </button>
                </header>
            </div>
        );
    }
}


// function App() {
//
//     const scrollBoxRef = React.createRef();
//
//     const handleClick = function () {
//         console.log("배고프다배고프다---")
//         console.log(scrollBoxRef)
//         console.log("슬슬뭐먹지-----")
//
//         scrollBoxRef.current.scrollToBottom()
//         // 허 .... 책 예제랑 전혀다르네
//     }
//
//   return (
//     <div className="App">
//       <header className="App-header">
//         <img src={logo} className="App-logo" alt="logo" />
//         <ScrollBox ref={scrollBoxRef} />
//         <button onClick={handleClick} >
//             아래로
//         </button>
//       </header>
//     </div>
//   );
// }

export default App;

'프론트 > React' 카테고리의 다른 글

react  (0) 2022.04.15
yarn berry + react +TS + Storybook init  (0) 2022.03.24
생각 메모(1)  (0) 2021.04.18
초보자 자습서(tutorial) 따라하다가  (0) 2021.03.21

서브라임으로 탭으로 신나게 작성했더니

어머, 탭은 안되네 스페이스로 바꾸고나서 실행되었다.

그리고 detach 넣으려고 봤는데 그냥 실행할 때 up뒤에 붙여주자....

docker-compose up -d

끝.

'몰라그거무서운거 > 기타등등' 카테고리의 다른 글

OpenWhisk  (0) 2021.04.29
쿠베 메모  (0) 2021.04.26
hive 에서 create table 등이 안될 때...  (0) 2021.04.02
java 추가 설치중 에러가...  (0) 2021.02.24
sqoop 메모.  (0) 2018.07.19

🥺 오늘도 영어네. (한국어일리가 없지)

아무튼 컬러픽커나 여러가지 사진에 대해 CSS 등을 조정하는, (블러 등) 이런걸

요번에 자바스크립트로 업데이트 해볼것이다.

스타일부터 선언하는데 가상 선택자라고 :루트에다가 :root 라고 먹였다.🔥

blog.thereis.xyz/136

 

:root 가상선택자와 CSS 변수

CSS에서 간단한 변수를 선언하고 사용할 수 있다는 사실에 대해서 알고 있는 사람은 알겠지만 모르고 있는 사람들도 있을 것 같아 친절한 내가 소개하려고 가져왔다. 일단 :root 가상선택자에 대

blog.thereis.xyz

그담에 대쉬대쉬가 뭐냐고?

developer.mozilla.org/ko/docs/Web/CSS/Using_CSS_custom_properties

 

사용자 지정 CSS 속성 사용하기 (변수) - CSS: Cascading Style Sheets | MDN

사용자 지정 CSS 속성 사용하기 (변수) 사용자 지정 속성(CSS 변수, 종속 변수)은 CSS 저작자가 정의하는 개체로, 문서 전반적으로 재사용할 임의의 값을 담습니다. 사용자 지정 속성은 전용 표기법

developer.mozilla.org

CSS에서 쓸 변수요.

var(--변수명); 써서 잘 만들고, 동작하나 확인하자. 마지막으로 필터까지 먹이면 완성~
아. 클래스 h1 ... JS 글자까지 먹이기 ^^

CSS 변수를 업데이트 해보자꾸나.

도쿠먼트 쿼리설랙트 올~ (.countrols input)~ 😓
... 해서 각 컨트롤러의 값을 받자. 이것은 유사 배열 객체요. 상속받은 메서드들이 참 많다.
핸들 업데이트를 하나 만들고, 반복을 돌며 변경되는경우, 핸들을 건드리면 이벤트를 받는 콘솔을 찍어보자.
드래그 해도 체인지 하고 싶으면 마우스무브로 바꿔라. 난리난다.

😭 아무쪼록, 근데 이 CSS와 input을 바인딩해서 연결을 해야할 것 같은데 어떻게하느냐가 중요하니까
dataset을 통해서 돔에 data-어쩌구저쩌구로 하면 에 저장해둘 수 있는 공간이 생긴다.

... 아 똥같네... 예제가 ㅠㅠ 아무쪼록, suffix 를 하나 만들어서 사이즈를 받아보자. 없으면 || '' ; 해서 초기화 하는걸로

아무튼 사이즈를 다 가져오고 아닌경우 안받아오니 좋은 예제이다.

가지고온 네임을 이용해서 document 의 set property를 위에서 만든 변수명으로 지정한다.
이런식으로 바뀌는 변수명을 업데이트 할 수 있다.

끝.

'프론트 > javascript' 카테고리의 다른 글

30일 Javascript 따라해보기 메모(2) - CSS 시계  (0) 2021.04.07
30일 Javascript 따라해보기 (1) 드럼킷 - 메모  (0) 2021.04.06
그냥 메모  (0) 2021.01.11
mocha vs jest  (0) 2020.11.29

자. 2일분량 회차다.🙂 아무쪼록, 잘해보자.

구현내용은 여기 있으니까, 영상 안보고 만들면 된다.

3개의 핸들이 겹쳐있다. 뭘 하면 돌릴 수 있을까? 트랜스폼 rotate이다. 그리고 이 회전 힌지? (접히는 부분 돌리는 포인트를 끝쪽으로 밀어서 중심이 되어 돌아가게 조절하는게

transform-origin: 100%;

핸들이 어떻게 만들어지는지 동작에 대한 부분을 검토.🔥 트랜스폼과 트랜지션으로 해결본다. 

째각째각도 아래 코드로 만들기. 나는 이렇게 했다.

      transition-timing-function: cubic-bezier(0.4, 0, 0.38, 1.84);

그 후 1000ms 마다 setInteval로  1초마다 현재 초를 구분하고, 초마다 넘어가는 각도도 Dedgree로 정하고.

초단위 앵글단위로 잘 넘어가나 봤으면

분단위 , 시단위 아무거나 골라서 초단위로 움직이는지 테스트 완료하고.

각 남은 핸들(초, 분 시)에 대한 핸들링을 먹인 후, 동작하는지 확인하고, (여기까지하면 반복코드가 보인다.)

길이조정 정도 남았고, 코드정리가 남았네. (안하네?)

아니네, 시간이 넘어갈 때 90도에서 0도로 넘어갈 때 나는 너무 순간적으로 튕기니까
트랜지션 타이밍 함수를 좀 변경해야할 것 같다.

코드정리 부분은 반복되는 부분을 함수로 묶어 빼는것이 좋다.

20장 - 엄격모드
: 🙂 적용 할거면 다하고, 부분적으로 섞어 쓰지말고, 린트를 쓰는것도 좋다.

21장 - 빌트인 객체
: 여러가지 객체의 분류를 다루어 주었다. 빌트인 객체, 원시값이 있는데 왜 있는지, 전역객체(새로나온 globalThis), eval은 쓰지말고, 암묵 전역의 경우도🙂... 음...😓 개인적으로 사람들이 안썼으면 좋겠다.

22장 - this
✨디스! 이것! 이건... 이거다! 이 챕터도 중요한 챕터다.
자기자신! 식별자가 없으면 식별할 수 없잖어... 그치만 함수의 경우 기명 함수 표현식으로 재귀 식별해도 되긴하는데 쫌 모양새라고 해야하나... 어렵잖아... 사람이 보기에... 그래서 클ㄹㅐㅅㅡ.....
함수호출 방식에 따라 정적(렉시컬) 스코프에선 this 바인딩 시점이 좀 다른거랑... 뭐... 프레임워크 다루게 되면 일반함수 호출은 거의 안할거고 메서드나 생성자로 많이 쓰게되니, 오해하는 경우가 있다. 호출 방식에 따라 바인딩 되는곳이 다르다.
아. bind는 은근 꽤 많이 쓰인다... 그러니까 마지막의 표 주의깊게 볼 것.


23장 - 실행 컨텍스트
: 중요한장이다. 이 실행 컨텍스트라는 친우의 역할을 알려준다.
전역 객체 생성(객체환경레코드) -> 전역 코드 평가 -> 전역 코드 실행 -> 함수 코드 평가 -> 함수 코드 실행의 과정을 익히고
실행스택, 스코프, 렉시컬환경의 이해도를 높여주었다.🔥🔥🏓 렉시컬 환경은 - TL;DR... 컴포넌트로 구성되어있고, 전역환경레코드, 객체환경 레코드랑 선언적 환경 레코드 이런건 첨듣네 ㅠㅠㅠㅠㅠㅠㅠ 얼마나 이 무지했단말인가 ㅠㅠ그냥 메모리 저장인줄알았지ㅠ레코드가 있었구나ㅠ
ES6에서 그럼 선언적 레코드 환경이 새로 추가된건거구나. let const 를 위해서.. .. ㅠㅠㅠㅠㅠㅠㅠ그림 23-24 ㅠㅠㅠ 참 친철하네..

24장 - 클로저
: 얘도 중요하잖아... 아니 이책에 안중요한게 없는 것 같다. 
근데 앞에 실행컨텍스트랑 렉시컬 환경 험한거 지나와서 정말 책에 써있는데로 쉽네. 
그림 24-1을 참고하자. 이전 실행컨텍스트 장에서 나왔던 내용을 환경을 추가해서 더욱 잘 설명하고 있다. 외부함수보다 ㅁㅁㅁㅁ가 긴 내부함수. 이러한 중첩 함수가 클로저. 캡슐 정보화 은닉의 경우, 직접 접근하면 안되는 정보를 대표적인 우리들의 모던한 예제인 makeCount 함수로 표현하고 있다. 이건 모던 자바스크립트 튜토리얼에도 나오는 좋은 예제. 거기에 더해서 두번 호출하는 딥다이브를 보여주는군...🥺 두번 호출 하면서 생기게 되는 자유변수 공유 문제 해결을 표현하고... predicate
MDN: 클로저는 함수와 함수가 선언 된 렉시컬환경의 조합이다. 😇

25장 - 클래스
: 문법적 설탕인가? ... ㅇㅇ 난 설탕이라도 맛있으니 새로운 객체 생성 방법으로 필요한 절차라고 생각했다.🙂
418쪽에 4번이 최근 당한 내용이네... 암묵적으로 strict 적용 되는 부분.😓 클래스명에 파스칼 케이스는 쓰는것을 권장 함. 

함수로 평가되는것과 호이스팅이 되는구나. 다른 언어의 교육에서 붕어빵틀로 표현하... 는 클래스... 인스턴스 생성 안하면 무용지물이니까 new 연산자 없이 쓰면 ... 음 그렇군...🙂

클래스 문법에 익숙해지면 프로토타입으로 했던것보다 손쉽게 구현할 수 있구나.
Prototype 메서드와 Static 메서드의 차이점을 이야기하는구나.. Static 공간이다 보니까 내꺼만 쓸 수 있군. Math.max 같은걸로.

옹...✨클래스 몸체에 정의하는 방식이 ....... 생겼는데 25-69예제 super는 여기서부텉 다시 좀 봐야겠네 졸리나 ㅠㅠ...

+ Recent posts