도커 명령어

Containers

docker build -t friendlyhello . # Create image using this directory's Dockerfile
docker run -p 4000:80 friendlyhello # Run "friendlyname" mapping port 4000 to 80
docker run -d -p 4000:80 friendlyhello # Same thing, but in detached mode
docker container ls # List all running containers
docker container ls -a # List all containers, even those not running
docker container stop <hash> # Gracefully stop the specified container
docker container kill <hash> # Force shutdown of the specified container
docker container rm <hash> # Remove specified container from this machine
docker container rm $(docker container ls -a -q) # Remove all containers
docker image ls -a # List all images on this machine
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine
docker login # Log in this CLI session using your Docker credentials
docker tag <image> username/repository:tag # Tag <image> for upload to registry
docker push username/repository:tag # Upload tagged image to registry
docker run username/repository:tag # Run image from a registry

Services

docker stack ls # List stacks or apps
docker stack deploy -c <composefile> <appname> # Run the specified Compose file
docker service ls # List running services associated with an app
docker service ps <service> # List tasks associated with an app
docker inspect <task or container> # Inspect task or container
docker container ls -q # List container IDs
docker stack rm <appname> # Tear down an application
docker swarm leave --force # Take down a single node swarm from the manager

[django-channels] 채널 요약

채널이란 무엇입니까?

 

채널은 Django를 확장하여 두가지 중요한 기능을 허용하는 새로운 레이어를 추가합니다.

  • 일반 뷰와 매우 유사한 방식으로 웹소켓 처리
  • Django와 동일한 서버에서 실행되는 백그라운드 작업

It allows other things too, but these are the ones you’ll use to start with.

어떻게?

Django는 두 가지 프로세스 유형으로 구분됩니다.:

  • HTTP 및 웹 소켓을 처리
  • 뷰, 웹소캣 처리 그리고 백그르카운드 작업(consumers) 실행

이것들은 ASGI라는 프로토콜을 통해 통신합니다. ASGI는 WSGI와 유사하지만 네트워크를 통해 실행되며 더 많은 프로토콜 유형을 허용합니다.

채널은 asyncio, gevent 또는 다른 비동기 코드를 Django 코드에 도입하지 않습니다.; 모든 비즈니스 로직은 woker 프로세스 또는 스레드 내에서 동기적으로 실행됩니다.

장고를 어떻게 바꾸어야합니까?

아니요, 모든 새로운 것들은 전적으로 선택 사항입니다. 그러나 원하는 경우 WSGI 서버에서 Django를 실행하는 것으로부터 다음과 같이 실행하도록 변경할 수 있습니다.:

  • ASGI 서버, 아마도 Daphne
  • Django worker servers, using manage.py runworker
  • Something to route ASGI requests over, like Redis.

채널을 실행할 때조차도 기본적으로 모든 HTTP 요청을 Django보기 시스템으로 라우팅하므로 이전과 같이 작동합니다..

Channels가 제공하는 기능?

기타 기능은 다음과 같습니다:

  • 한 번에 수천 명의 고객을 위한 쉬운 HTTP long-poll 지원
  • WebSocket에 대한 전체 세션 및 인증 지원
  • 사이트 cookies 기반으로 WebSocket 자동 사용자 로그인
  • 이벤트의 대량 트리거를위한 내장 기본 요소 (채팅, 라이브 블로그 등)
  • 새로운 작업자가 가동되는 동안 브라우저가 일시 중지 된 상태의 중단 시간 배포
  • URL 단위로 선택적 로우 레벨 HTTP 컨트롤
  • 다른 프로토콜 또는 이벤트 소스 (예 : WebRTC, 원시 UDP, SMS)에 대한 확장 성

확장 가능한가요??

예, 유스 케이스에 맞게 프로토콜 서버 (HTTP 및 WebSocket을 지원하는 프로토콜 서버)와 작업 서버 (장고 코드를 실행하는 프로토콜 서버)를 원하는대로 실행할 수 있습니다.

ASGI 스펙은 서로 다른 여러 채널 계층을이 두 구성 요소 사이에 서로 다른 성능 특성으로 연결할 수있게 해주 며, 자체의 프로토콜 및 작업자 서버로 별도의 클러스터를 실행할 수있는 기능뿐 아니라 쉬운 샤딩 (sharding) 기능을 모두 지원하도록 설계되었습니다.

왜 내가 좋아하는 메시지 대기열을 사용하지 않습니까?

채널은 낮은 대기 시간 (목표는 수 밀리 초)과 보증 된 배달보다 높은 처리량 (일부 메시지 대기열 디자인과 일치하지 않음)을 선호하도록 의도적으로 설계되었습니다.

메시지의 보장 된 주문과 같은 일부 기능은 성능 저하를 가져 오지만 메시지 대기열을 더 많이 만들도록 선택합니다.

모든 코드를 비동기식으로 만드는 것에 대해 걱정할 필요가 있습니까?

아니요, 모든 코드가 소켓이나 이벤트 루프없이 동 기적으로 실행됩니다. Django 뷰 또는 채널 소비자 내에서 비동기 코드를 사용할 수 있습니다 (예 : 많은 수의 URL을 병렬로 가져 오는 경우와 같이).하지만 배포 된 전체 사이트에는 영향을 미치지 않습니다.

장고의 어떤 버전이 함께 작동합니까?

Django> = 1.8 용 라이브러리로 채널을 설치할 수 있습니다. 몇 가지 추가 의존성이 있지만, pip를 사용하면 이들 모두가 설치됩니다.

Official project

채널은 처음에는 장고 코어에 포함되어 있지 않지만, 2016 년 9 월 이후 공식 Django 프로젝트입니다. 공식 프로젝트로 채택되는 채널에 대한 자세한 내용은 Django 블로그에서 확인할 수 있습니다.

TypeScript in 5 minutes

TypeScript 설치

TypeScript 도구를 얻는 방법에는 크게 두 가지가 있습니다.

  • npm을 통해 (Node.js 패키지 관리자)
  • TypeScript의 Visual Studio 플러그인 설치

Visual Studio 2017 및 Visual Studio 2015 Update 3에는 기본적으로 TypeScript가 포함되어 있습니다. Visual Studio와 함께 TypeScript를 설치하지 않았다면 다운로드 할 수 있습니다.

NPM 사용자의 경우 :

npm install -g typescript

첫 번째 TypeScript 파일 만들기

편집기에서 다음 JavaScript 코드를 입력하십시오 greeter.ts.

function greeter(person) {
    return "Hello, " + person;
}

var user = "Jane User";

document.body.innerHTML = greeter(user);

코드 컴파일하기

.ts확장 기능을 사용 했지만, 이 코드는 자바스크립트입니다. 기존 자바 스크립트 앱에서 바로 복사/붙여 넣기를 할 수 있습니다.
명령 줄에서 TypeScript 컴파일러를 실행합니다.

tsc greeter.ts

실행 결과인 greeter.js 파일은 동일한 코드를 가지고 있습니다. 우리는 JavaScript 응용 프로그램에서 TypeScript를 사용하여 실행하고 있습니다!

이제 TypeScript가 제공하는 새로운 도구를 활용할 수 있습니다. 다음 : string과 같이 ‘person’함수 인수에 유형 주석을 추가 하십시오.

function greeter(person: string) {
    return "Hello, " + person;
}

var user = "Jane User";

document.body.innerHTML = greeter(user);

주석 입력

TypeScript의 형식 주석은 함수 또는 변수의 의도 된 계약을 기록하는 간단한 방법입니다. 이 경우 greeter 함수를 단일 문자열 매개 변수로 호출 할 예정입니다. 대신 콜 그리터를 변경하여 배열을 전달할 수 있습니다.

function greeter(person: string) {
    return "Hello, " + person;
}

var user = [0, 1, 2];

document.body.innerHTML = greeter(user);

다시 컴파일하면 오류가 표시됩니다.

error TS2345: Argument of type 'number[]' is not assignable to parameter of type 'string'.

마찬가지로 greeter 호출에 대한 모든 인수를 제거하십시오. TypeScript는 예상치 못한 수의 매개 변수로이 함수를 호출했다는 것을 알려줍니다. 두 경우 모두 TypeScript는 코드 구조와 사용자가 제공 한 형식 주석을 기반으로 정적 분석을 제공 할 수 있습니다.

에러가 있었지만 greeter.js파일은 여전히 ​​생성됩니다. 코드에 오류가 있어도 TypeScript를 사용할 수 있습니다. 그러나이 경우 TypeScript는 코드가 예상대로 실행되지 않을 것이라고 경고합니다.

인터페이스

우리의 견본을 더 발전 시키자. 여기서는 firstName 및 lastName 필드가있는 객체를 설명하는 인터페이스를 사용합니다. TypeScript에서는 두 가지 유형이 내부 구조가 호환되면 호환됩니다. 이것은 우리가 명시 적 implements절이 없이 인터페이스가 요구하는 모양을 가짐으로써 인터페이스를 구현할 수있게 해줍니다 .

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

var user = { firstName: "Jane", lastName: "User" };

document.body.innerHTML = greeter(user);

수업

마지막으로 클래스를 사용하여 예제를 마지막으로 확장 해 보겠습니다. TypeScript는 클래스 기반 객체 지향 프로그래밍과 같은 JavaScript의 새로운 기능을 지원합니다.

여기 Student에서는 생성자와 몇 개의 공개 필드가 있는 클래스 를 만듭니다 . 클래스와 인터페이스가 잘 작동하여 프로그래머가 올바른 수준의 추상화를 결정할 수 있습니다.

또한 주목할 public것은 생성자 에 on 인수를 사용한다는 것은 그 이름을 가진 속성을 자동으로 만들 수있는 단축형이라는 점입니다.

class Student {
    fullName: string;
    constructor(public firstName: string, public middleInitial: string, public lastName: string) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person : Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

var user = new Student("Jane", "M.", "User");

document.body.innerHTML = greeter(user);

재실행 tsc greeter.ts하면 생성 된 JavaScript가 이전 코드와 동일하다는 것을 알 수 있습니다. TypeScript의 클래스는 JavaScript에서 자주 사용되는 것과 동일한 프로토타입 기반 OO의 줄임말입니다.

TypeScript 웹 앱 실행

이제 다음을 입력하십시오 greeter.html.

<!DOCTYPE html>
<html>
    <head><title>TypeScript Greeter</title></head>
    <body>
        <script src="greeter.js"></script>
    </body>
</html>

greeter.html첫 번째 간단한 TypeScript 웹 응용 프로그램을 실행하려면 브라우저에서 엽니다 .

옵션 : greeter.tsVisual Studio에서 열거나 코드를 TypeScript 놀이터로 복사하십시오. 식별자 위로 마우스를 가져가면 유형을 볼 수 있습니다. 경우에 따라 이러한 유형이 자동으로 추론됩니다. 마지막 줄을 다시 입력하고 DOM 요소의 유형에 따라 완료 목록 및 매개 변수 도움말을 확인하십시오. greeter 함수에 대한 참조에 커서를 놓고 F12 키를 눌러 해당 정의로 이동하십시오. 기호를 마우스 오른쪽 버튼으로 클릭하고 리팩토링을 사용하여 심볼의 이름을 바꿀 수 있습니다.

제공된 유형 정보는 애플리케이션 규모에서 JavaScript로 작업 할 수있는 도구와 함께 작동합니다. TypeScript에서 가능한 모든 예제는 웹 사이트의 샘플 섹션을 참조하십시오.

Visual Studio 그림

 

추신 : 구글 번역 잘된다. 최고 ㅋㅋㅋ

원문 : https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html

php에서 암호화 mcrypt_encrypt를 사용하지 말고 Libsodium 또는 openssl_encrypt를 사용.

mcrypt_encrypt를 사용하여 암호화 할 때, pkcs7 패딩 처리를 안해주면, openssl_decrypt나, 다른 언어 복호화에서 복호화가 불가능하다.

때문에 되도록 사용을 자제하고, 만약에 레거시 시스템에서 사용하게 되면, pkcs7 처리를 해줘야한다.

https://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%ED%91%9C%EC%A4%80

 

예제 소스

<?php
function pkcs7_pad($str)
{
    $len = mb_strlen($str, '8bit');
    $c = 16 - ($len % 16);
    $str .= str_repeat(chr($c), $c);
    return $str;
}

$message = 'test';
$key = openssl_random_pseudo_bytes(16);
$iv = openssl_random_pseudo_bytes(16);

$cipher = mcrypt_encrypt(
    MCRYPT_RIJNDAEL_128,
    $key,
    pkcs7_pad($message),
    MCRYPT_MODE_CBC,
    $iv
);

$plain = openssl_decrypt(
    $cipher,
    'aes-128-cbc',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

var_dump(
    $message,
    bin2hex($cipher),
    $plain,
    mb_strlen($message, '8bit'),
    mb_strlen($plain, '8bit'),
    $message === $plain
);
?>

https://3v4l.org/bdQe9

mcrypt_encrypt를 사용하면 안되는 이유

https://paragonie.com/blog/2015/05/if-you-re-typing-word-mcrypt-into-your-code-you-re-doing-it-wrong

mcrypt_encrypt 대안

  • Use Libsodium – A PHP extension (PHP7.2 부터는 기본적으로 들어가있음.)
  • If you can’t use Libsodium, use defuse/php-encryption – Straight PHP code
  • If you can’t use Libsodium or defuse/php-encryption, use OpenSSL – A lot of servers will already have this installed. If not, it can be compiled with –with-openssl[=DIR]

https://stackoverflow.com/questions/41272257/php-7-mcrypt-deprecated-need-alternative
https://paragonie.com/white-paper/2015-secure-php-data-encryption

ubuntu에서 mysql 5.7 또는 mariadb 10 이상 root password reset

# Stop MySQL
sudo service mysql stop

# Make MySQL service directory.
sudo mkdir /var/run/mysqld

# Give MySQL user permission to write to the service directory.
sudo chown mysql: /var/run/mysqld

# Start MySQL manually, without permission checks or networking.
sudo mysqld_safe --skip-grant-tables --skip-networking &

# Log in without a password.
mysql -uroot mysql

Update the password for the root user.

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

mysql 재시작

# Turn off MySQL.
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

# Start the MySQL service normally.
sudo service mysql start

keystone 설치 시 keystone-manage bootstrap 명령어 잘못 입력하였을 경우 이슈 해결 방법.

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \

--bootstrap-admin-url http://controller:35357/v3/ \

--bootstrap-internal-url http://controller:35357/v3/ \

--bootstrap-public-url http://controller:5000/v3/ \

--bootstrap-region-id RegionOne

 

위와 같이 명령어를 호출하여 설정한 endpoint url 변경해야 할 경우 아래와 같은 방법으로 처리 해주면 된다.

> endpoint 조회

openstack endpoint list

> endpint 삭제

openstack endpint [endpoint-id]

 

엘론 머스크처럼 팔방미인이 되는 방법

  1. 다양한 분야에 걸쳐 읽고 경험한다.
  2. 기초원리로 아이디어를 해체하고 새로운 방법으로 재구성해 배운 것을 활용한다.

 

서로 다른 분야를 연결해 원리를 재구성하는 사고방식을 기르기위한 방법.

  1. 이것은 무엇을 생각나게 하는가?
  2. 왜 이것을 생각하게 하는가?

 

출처 : http://www.ttimes.co.kr/view.html?no=2016081609337757706

http://www.ttimes.co.kr/view.html?no=2016070513287789068