ㅈ바스크립트에서 await 은 Promise 를 방출하는 놈에 달아줄 수 있다

async function printData(){
    let endpoint = "https://jsonplaceholder.typicode.com/posts/1"
    let dataset = await fetch(endpoint).then((res) => { return res.json() })

    try {
        console.log(dataset)
    } catch(e) {
        console.log(e)
    }
}

printData() //쨘 json 데이터 프린트 성공

위 코드에서 fetch 가 Promise 를 방출하기 때문에 await 키워드를 달아서 파싱된 json을 dataset 에 담아 줌.
그렇기 때문에 try 문에서 받아온 json 데이터를 .then()으로 Promise 해결하지 않고도 사용 가능.

async/await 을 쓰는 이유야 여러개 있겠지만, 그 중 최고의 이유는 .then() 체인조차도 마지막엔 콜백지랄을 해야되기 때문에 어떻게든 불편할 수밖에 없었던 우리의 마음을 달래기 위한 최고의 솔루션이기 때문이지 않나 싶고...


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,
$composer require vlucas/phpdotenv

을 프로젝트 루트 디렉토리에서 실행하면 의존성에 phpdotenv가 주입됨
그다음 index.php에서 아래 코드를 최상단에 추가함

require 'vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

그다음 프로젝트 root디렉토리에 .env 파일을 생성하고 아래와 같이 불러 쓰면됨

$someEnvVariable = $_ENV["YOUR_ENV_VARIABLENAME"]

composer 가 설치되지 않았거나 설치하지 않은 채로 적용하고 싶다면 아래 github repository를 참조할 것.
https://github.com/agungjk/phpdotenv-for-codeigniter


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

가령 아래와 같은 코드가 있다고 친다면,

@Binding var momentDate: Date

위 변수에는 세 가지 방법으로 접근할 수 있다.

  1. self._momentDate
  2. self.momentDate
  3. self.$momentDate

1번은 Binding<Date> 구조체 자체를 나타낸다.
2번은 self._momentDate.wrappedValue를 타나낸다. 즉 Date 자료형의 값 그 자체이다. View Body의 UI를 렌더링 할 때에는 이 값을 사용한다.
3번은 self._momentDate.projectedValued와 같다. 다시 말해 Binding<Date>이며, 이 값은 Child View에게 내려주면 Child View의 UI가 값을 변경할 때 사용할 수 있다.

Binding의 경우 Projected Value($)는 self 이다. 그리고 _와 $의 차이는 액세스 레벨 뿐이다. 하지만 프로퍼티 래퍼마다 각자 다른 형식의 값을 나타낼 수 있다. (예를 들어 Language Guide@SmallNumber를 살펴보자)

원문: StackOverflow


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,
git config --global user.name 'YOUR_GITHUB_ACCOUNT'                               
git config --global user.password 'YOUR_GITHUB_ACCOUNT_TOKEN'

github account token은 아래의 경로에서 발급받을 수 있다.

1. 계정 > Settings


2. 좌측 사이드바 메뉴에 Developer Settings


Tokens 에서 발급받은 내용을 입력

 


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,
 ! [rejected]        main -> main (fetch first)

위 에러가 나오고 push 가 안될때 강제로 해결하는 법.
주의할 점은 아래 방법을 수행할 시 리모트에 있는 모든 커밋이 증발하므로 여러 사람이 함께 작업하는 공동 프로젝트에는 사용하지 말 것.

git push -u origin +REMOTE_REPO_BRANCH

예) git push -u origin +main 

위의 명령을 실행하면 리모트 브랜치에 강제로 push 해서 덮어 써 버리게 된다.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

오늘 오랜만에 자바스크립트 fetch API로 파일 업로드를 할 일이 있었는데 참으로 멍청한 실수를 했음.
input[type=file] 의 files 값을 받아왔어야 했는데 value를 받아서 넘기는 바람에 컨트롤러가 파일이 없다고 에러를 뿜어댄 것.

요약)
document.querySelector('input.yourInputClass[type=file]').value (X)
document.querySelector('input.yourInputClass[type=file]').files[0] (O)

오늘의 나는 멍청이 ㅠㅠ


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

Codeigniter를 서버에 올렸을 때 Headers and client library minor version mismatch. Headers:00000 Library:00000 오류가 발생하는 경우가 있다. 이 오류는 코드이그나이터 데이터베이스 드라이버 파일의 MySQLi 연결 시 헤더와 클라이언트 라이브러리의 버전이 일치하지 않아서 생기는 문제인데 해결법은 아래와 같다.

{www root}/system/database/drivers/mysqli/mysqli_driver.php 파일의 203번줄에 있는

if ($this->_mysqli->real_connect($hostname, $this->username, $this->password, $this->database, $port, $socket, $client_flags))

이 코드를 아래와 같이 수정하면 해결된다.

if (@$this->_mysqli->real_connect($hostname, $this->username, $this->password, $this->database, $port, $socket, $client_flags))

DB통신은 가능하지만 에러메시지에 막혀있던 상태를 PHP의 error control operator인 @ prefix를 붙여서 표현상에서 발생하는 에러를 무시해주는 것으로 해결하는 방식.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

자주 쓰는 기능이기에 간단한 javascript로 tab 기능을 구현해 보았음.


로직:

클릭이 일어났을 때 showtab() 함수를 돌리고 함수에 포함된 반복문으로 파라메터와 탭 번호가 같은지 대조하여 같으면 display: block;, 다르면 display:none; 으로 처리하도록 하였다.


Javascript

function showtab(a){

for(i = 0 ; i <=2 ; i++){

var target = document.getElementById('tab' + i)

if(i == a){

target.style.display = 'block';

} else {

target.style.display = 'none';

}

}

}



HTML

<ul>

<li><a href="javascript:;" onclick="javascript:showtab(0);">show first tab</a></li>

<li><a href="javascript:;" onclick="javascript:showtab(1);">show second tab</a></li>

<li><a href="javascript:;" onclick="javascript:showtab(2);">show third tab</a></li>

</ul>

<div id="tab0" class="tab">

first tab

</div>

<div id="tab1" class="tab">

second tab

</div>

<div id="tab2" class="tab">

third tab

</div>



CSS

ul {

list-style-type: none;

padding: 0;

}


li {

display: inline-block;

margin-right: 15px;

}

.tab {

width: 240px;

height: 240px;

text-align: center;

background-color: red;

color: #fff;

padding: 30px;

display: none;

}

#tab0 {

display: block;

}



결과는 아래 링크에서 확인할 수 있음.

codepen에서 보기


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

오늘부터 MySQL + PHP를 공부하기 시작.

PHP를 본격적으로 파기 전에 SQL을 좀 공부해 둬야겠어서 오픈 강좌를 보고 열심히 진행 중.

오늘은 기초적인 명령에 대해 학습하였고 아래는 그 스터디 노트들임.


데이터베이스 리스트 호출

mysql> show databases;


데이터베이스 사용

mysql> use NameOfDataBase;


데이터베이스 테이블 만들기

mysql> CREATE TABLE nameOfTable (

nameOfFirstRow dataType(lengthOfData) NOT_NULL AUTO_INCREMENT,

nameOfSecondRow dataType NULL,

PRIMARY KEY (theValue)

);

//NOT_NULL: NULL이 아니어야 됨, AUTO_INCREMENT: 자동 증가, PRIMARY KEY: 정렬 기준이 되는 값(인것 같음)



테이블 항목 조회하기

mysql> desc nameOfTable;


테이블 모든 항목 데이터 조회하기

mysql> SELECT * FROM nameOfTable;


테이블 일부 항목 데이터 조회하기

mysql> SELECT firstRowName, secondRowName FROM nameOfTable;


테이블 항목 데이터 추가하기

mysql> INSERT INTO nameOfTable (firstRowName, secondRowName) VALUES('firstColumnValue', 'secondColumnValue');


테이블 항목 일부만 조회하기

mysql> SELECT * FROM nameOfTable WHERE nameOfValue = theValue;

//nameOfValue의 theValue값을 가진 항목을 표시해라


테이블 항목 갱신(수정)하기

mysql> UPDATE nameOfTable SET nameOfValue = theValue WHERE primaryKeyValue = theValue;

//primaryKeyValue의 theValue항목 중 nameOfValue 항목의 값을 theValue로 고쳐라(갱신해라).


테이블 항목 삭제하기

mysql> DELETE FROM nameOfTable WHERE primaryKeyValue = theValue;

//primaryKeyValue의 theValue항목이 있는 열을 삭제해라.


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,

1. 프로젝트에 사용하고자 하는 폰트의 원도(otf, ttf 등)를 drag&drop으로 가져온다. (본 예제에서는 Noto Sans CJK KR medium을 사용했다.)


2. 아래와 같이 프로젝트의 info.plist에 Font provided by application을 등록하고 폰트 이름을 아이템에 넣어준다.



3. viewDidLoad 에 아래 코드를 넣고 빌드하면 콘솔에 사용 가능한 폰트 이름이 출력된다.


for name in UIFont.familyNames() {

            print(name)

            if let nameString = name as? String

            {

                print(UIFont.fontNamesForFamilyName(nameString))

            }

        }



4. 아래의 코드를 추가하여 폰트와 크기를 정한다.


myTextView.font = UIFont(name: "NotoSansCJKtc-Medium", size: 12)


5. PROFIT!


WRITTEN BY
artfrige
베이스 연주는 건강에 좋습니다
,