https://nykim.work/84

 

반응형 웹 뚝딱 만들기 (1) - 뷰포트 메타태그와 미디어 쿼리

이 글은 공동 기술 블로그(tech.yeon.me)에도 올린 글입니다. (여기에서도 숨겨진 좋은 글을 발견할지도 몰라요!) 프롤로그 모바일 사용자가 점점 늘어나는 요즘 반응형으로 만든 웹 사이트를 쉽게

nykim.work

https://nykim.work/85

 

반응형 웹 뚝딱 만들기 (2) - vw, vh, vmin, vmax, em, rem 속성

프롤로그 지난 글에는 반응형을 위해 필요한 뷰포트 메타태그와 미디어 쿼리에 대해 다뤘었는데, 이번에는 CSS 속성을 통해 좀 더 편하고 쉽게 반응형을 만드는 방법을 알아보려고 합니다 🤟 히

nykim.work

https://velog.io/@cheal3/%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9%EA%B3%BC-%EB%B7%B0%ED%8F%AC%ED%8A%B8

 

반응형 웹과 뷰포트

반응형 웹 나중에는 기술의 발전으로 데스크톱 뿐만 아니라 스마트폰, 태블릿 컴퓨터, 텔레비전 등 대부분의 전자기기에서 웹에 접속 할 수 있게 되었지만, 전자기기들의 화면의 크기가 다른 탓

velog.io

 

날리게 되어 슬픈 마음에 작성중

labelColor = "#1ab394";
labelColor = "#D9556E";
labelColor = "#FF7D95";
labelColor = "#F5B345";
labelColor = "#6B5A3E";
labelColor = "#B3EB44";
labelColor = "#5C6B3F";
labelColor = "#B369F0";
labelColor = "#5C4D69";
labelColor = "#D97C5F";
labelColor = "#B56750";
labelColor = "#5A8AE8";
labelColor = "#5580D9";
labelColor = "#4F45F5";
labelColor = "#0598E6";
labelColor = "#000000";

1. 동적으로 datalist option을 추가하기

HTML

<div>
	<input id="snack" name="snack" list="snackList" type="text"/>
	<datalist id="snackList">
	</datalist>
	<input type="hidden" name="snack" id="snack-hidden">
</div>

JS

var snackData = {};

var snackListOpt = [];


//최초 설정
function addSnackOpt(){
	//response는 받아온 값
  response.forEach(function(res){
  		//data-value가 보낼 값, value가 보여질 값.
      var tmpStr = `<option data-value="${res.money}" value="${res.name}"></option>`
      snackListOpt.push(tmpStr);
  });
  $('#snackList').append(snackListOpt);


  $('#snackList option').each(function(i,el){
      snackData[$(el).data("value")] = $(el).val();
  });
}


//실제 전송할 때
function realValue(){
    var snackMoney = $('#snack').val().trim();
    snackMoney = $('#snackList [value="'+snackMoney+'"]').data('value');
    return snackMoney;
 }

 

삽질이 힘들었다.

 

 

[참고 블로그]

1. https://cbw1030.tistory.com/293

 

[JavaScript] select box에 동적으로 option을 추가해보자

오늘은 팀 프로젝트를 하면서 약간의 삽질을 하면서 알게된 select box에 option을 추가하는 방법을 포스팅하겠습니다. 서울 부산 제주 경기 인천 강원 경상 전라 충청 왼쪽 select box의 값에 매칭되는

cbw1030.tistory.com

2. http://jsfiddle.net/guest271314/j7ehtqjd/13/

#1. 내맘대로 봄

#a490ff / #ff90d1/ #bcff90

 

파스텔 톤. 배경으론 적절치 않다. 특히 초록색 배경에 하얀 글자를 넣으면 대체적으로 보이지 않는 편이다. 너무 예쁜 보라색을 발견해서 넣어봤다.

 

 

#1.5. 내맘대로 봄- 배경

 

#735bff / #ff5bbb / #a5ff5b

 

위의 색을 좀 더 찐하게 한 것. 배경으로 적절하지만 프로젝트랑은 안어울려서 기각. 초록색에 하얀 글자가 마찬가지로 잘 안보인다.

 

 

#2. 국룰 무지개

#ff5e6b / #ff9c40 / #5ce294 / #57abfa / #d690ff

 

배경으로 쓰기 좋은 원색 뙇 컬러. 하얀 글자 넣어도 잘 보임.

회색은 #e0e0e0, 검정은 #222222 가 어울린다.

 

 

 

노란색 잘쓰기 정말 힘들다.초록색은 배경으로 쓰기 정말 한정적이다.분홍색은 참 대단한 색이다. 뭘 하던 분위기를 핑크핑크하게 만든다.

 

문자열을 자를 때, 무심코 음절 갯수로 subString으로 자르게 되면

한글 + 영문 혼용의 상황에서, 굉장히 불편한 상황을 마주할 수 있다.

 

같은 여섯글자일 때, 한글과 영어가 각각

여섯글자입니다

abcde

로 보이는 현상을 마주할 수 있다. 

 

본인은 정해진 넓이의 칸에 글자가 넘치면 자르는 함수를 만드려고 했는데,

글자가 아니라 byte 단위로 잘라야 편안한 UI를 볼 수 있다.

(초보 개발자지만 이런 디테일에 신경쓰는 저, 비정상인가요?)

 

자르는 방법은 아래와 같다.

 

    var textEllipsis = function(data, offset){ //data: 자르고자 하는 str, offset: 자르는 byte 길이
        dataByteLength = (function(s,b,i,c){ //data의 길이를 byte로 변환한다
            for(b=i=0;c=s.charCodeAt(i++);b+=c>>11?3:c>>7?2:1);
            return b;
        })(data);

        if(dataByteLength > offset){
            for(b=i=0;c=data.charCodeAt(i);) {
                b+=c>>7?2:1;
                if(b > offset) break;
                i++;
            }
            return data.substring(0,i)+'…';
        }else{
            return data;
        }
    }

 

 

[참고 블로그]

https://programmingsummaries.tistory.com/239

https://zionh.tistory.com/68

[보고 있는 책] HACKERSCHOOL HANDBOOK #1 Buffer overflow 왕기초편

 

실습 환경 구축을 위해 갖춰야 할 것

1. VMPlayer(Vmware Workstation 15 Player로 진행하였다)

2. 책에 있는 링크를 통해 다운받은 BOF_Lecture_Red_Hat_6.2 파일(압축 해제한 상태)

 

VMware 실행 화면

1. VMware를 실행한다.

 

2. Open a Virtual Machine > ../BOF_Lecture_Red_Hat_6.2 폴더의 Red Hat Linux 6.2.vmx 클릭

 

3. 실행...

 

4. 콘솔창.. 뭔가 뜸...

 

*정보. 이 콘솔 창에 갇힌 마우스를 꺼내는 법은 ctrl+Alt이다.

 

그럼 다음과 같이 ...

깨졌다

잔뜩 깨진 ... 한글들을 마주할 수 있을 것이다. 해결하려면 어떻게 해야 하는지 찾아보다가...

이런 일들은 보통 터미널 접속을 통해 해결해왔기에 Xshell을 켰다.

 

... 난 Xshell로 ssh 연결밖에 안 해봤는데, TELNET으로 해야 해서 찾아봤다.

 

다행히 텔넷 서버는 깔려있다.
근데 xinetd가 없는거시다...

찾아보니까 뭐... 너무 옛날꺼라서 ....

VMware를 바꿔야 했다.

누른다.
NAT로 바꿔준다.(필자는 Bridged 였다.)

이후 재부팅 한 뒤 /sbin/ifconfig에 있는 eth0 ip주소를 보고

Xshell에 telnet {주소} 를 치면 해결된다.

 

아싸.

속보] 그래도 깨져 ...

이 운영체제는 정말정말 옛날 OS라서, 소중하게 다뤄줘야 한다. (나보다 나이가 많다.)

구글링 해서 15년도 검색결과도 과연 될까? 하며 벌벌 떨었다 ...

별 난리를 다쳤는데 그냥 저 지구본 모양>자세히>Korean 하면 됐다.

참고로 좀 건드린 별 난리는 재부팅하니까 초기화됐다.

 

... 어쨌든 한글이 보인다. 

 

와! 한글!

이제 실습하러 가자.

-나의 현재 상황-

git 계정은 있다. (gitlab)

project와 repository는 만들 수 있다. (멍청하게도 project와 repository를 동일 개념으로 생각한 탓에 프로젝트가 3개나 된다.)

github에 올라온 과제를 해야 한다.

 

 

1. Git global setup

내가 복붙, 코딩해야 하는 곳(나는 VMware ubuntu에서 코딩해야 했다.)에서 진행한다.

git config --global user.name "{내 유저 네임}"
git config --global user.email "{내 이메일}"

두 개를 다 해야 한다. 이렇게 되면 git과 내 코딩 장소가 연결된 것이다.

간혹 여기서 안되는 경우가 있는데, 둘 중 하나가 없거나 틀렸거나 인터넷이 안되면 안된다. 인터넷 환경을 잘 보자.

 

2. Create a new repository

일단 gitlab 또는 github 웹페이지에서 project를 만든 상황이다.

Clone 버튼을 눌러보면 Clone with HTTPS에 있는 주소를 확인한다.

git clone {HTTPS 주소.git}
cd {프로젝트 이름}

짜잔! 내가 만든 프로젝트에 왔다. (cd 전에 ls로 생성되었나 확인하자.) 아직 아무 것도 없어서 휑하다. 경고도 뜬다.

그럼 이제 뭔가 넣어보자.

 

3. Clone & Push an existing folder

해야 하는 과제를 clone한다.  위의 clone을 사용하자.

나의 경우는 이유는 모르겠으나 자꾸 로그인을 하라 해서 ... 그냥 있던 github 계정으로 fork해서 내 repo를 clone했다. 저번엔 됐는데 왜 이번엔 안되는지 미스테리.

cd {clone한 repo}
git init //안 해도 될 듯
git remote rename origin old-origin
git remote add origin {내 proj 주소}
git push -u origin --all
git push -u origin --tags

기존에 있던 clone을 했으므로 그냥 rename을 해주면 된다.

 

끝!

 

참고) 과제 하는 법

고치면 ..

git add .
git commit -m "{적을 메세지}"
git push

만 알면 일단 개인 프로젝트는 되는듯.

 

목차

-booting과 /etc/rc

-login과 /etc/passwd(shadow)

-networking과 여러 가지 file

 -/etc/hosts, /etc/services, /etc/protocols

 -/etc/networks

 

booting과 /etc/rc

- Booting : 컴퓨터가 처음에 power on을 하거나 reset을 했을 때 처음 시작되는 프로그램.

 bootstraper -> Boot Block(disk에 있음) -> OS

 이 과정의 마지막에서 /etc/init(pid=1을 생성하는 process) 이 불려옴 ->다른 process는 전부 init의 fork()

 

-init process : 시스템 초기화를 함. 처음에는 single user mode로 수행.

 shell program fork, stdio descriptor, system console terminal 생성. (하는 일이 많구만)

 

-multi user operation

 이 과정에서 일어나는 자세한 일 : shell을 만든다->/etc/rc에 있는 interpret하여 수행시킴

 /etc/rc : 시스템 초기화에서 수행해야 하는 일이 있음 

  +파일 시스템 체크, cron, syslog 데몬 생성, /etc/mtab file 작업 가능

 terminal device에 관련된 cofiguration file(/etc/tty)을 읽어서 한 entry마다 사용자 접속을 감지할 수 있는 프로그램(/etc/getty) 생성

 

init이 불려올 때의 위 과정들을 정리하자면 다음 그림과 같다.

init process fork()

 

login과 /etc/passwd(shadow) System Data File

-passwd

 passwd 파일에 있는 예시를 가져와서 각 요소가 뭘 의미하는지 살펴보자. 분리자는 :이다.

예시만 보면 답답하니까, 직접 shell 창을 켜서 찾아보자 passwd는 /etc에 있다.

cat passwd를 하면 목록이 쭉 뜬다. root를 일단 살펴보자.

passwd file - root

user name : encrypted password : numerical user id : numerical group id : comment field : initial working directory(home directory) : initial shell(user program, 사용하는 shell.)

의 순서대로 이루어져 있다. (볼 수 있는 세상이 넓어졌다!)

 

-passwd 관련 system call

[간단상식 ] get - return / set - write 

struct passwd *getpwuid(uid_t uid) uid를 통해 passwd를 얻겠다!
struct passwd *getpwname(const char *name) name을 통해 passwd를 얻겠다!

passwd struct는 다음과 같은 요소들이 들어있다 ...

char *pw_name

char *pw_passwd

uid_t  pw_uid

gid_t  pw_gid

char *pw_gecos

char *pw_dir

char *pw_shell

 

-home directory(~)

시작했을 때, 사용자마다 home directory에 login 정보가 들어있는 system data file이 있다.

 +login

  /bin/sh

   ~/.profile : (.login + .cshrc)

  /bin/csh

  ~/.login : set terminal type, environment vars(fork, exec 할 때 e 변수에 관련된 것)

  ~/.cshrc : set command alias, path, umask(access control에 해당. umask에서 masking 되어있으면 해당하는 access permission이 protection함. default mask값 설정)

  +logout

   /bin/csh

   ~/.logout : logout할 때 해야 하는 동작들.

 

networking과 여러 가지 file

-Login Procedure(로그인 과정)

 +terminal login

  +network login

우리는 알고 있다. 이 그림들을 다시 자세히 보게 될 것이라는 것을 ... 그냥 통짜로 정리해보자.

 

 

-/etc/hosts, /etc/services, /etc/protocols

 +/etc/hosts : 각 host에 대한 정보. ip주소, hostname가 기록되어 있는 system daa file

 +/etc/service : IP + port(service, 프로세스 관련)

 +/etc/protocol : transport layer에서 어떤 protocol을 사용하는지 (TCP, UDP)

 

 

위의 정보들을 총정리한 표 역시 존재한다!

 

'~ OLD > SSS' 카테고리의 다른 글

SSS-3. UNIX 시스템 호출  (0) 2020.04.12
SSS-1_2. UNIX 시스템 소개 및 구조  (2) 2020.04.11

+ Recent posts