git config --global user.name 'YOUR_GITHUB_ACCOUNT'
git config --global user.password 'YOUR_GITHUB_ACCOUNT_TOKEN'
github account token은 아래의 경로에서 발급받을 수 있다.
WRITTEN BY
- artfrige
베이스 연주는 건강에 좋습니다
git config --global user.name 'YOUR_GITHUB_ACCOUNT'
git config --global user.password 'YOUR_GITHUB_ACCOUNT_TOKEN'
github account token은 아래의 경로에서 발급받을 수 있다.
! [rejected] main -> main (fetch first)
위 에러가 나오고 push 가 안될때 강제로 해결하는 법.
주의할 점은 아래 방법을 수행할 시 리모트에 있는 모든 커밋이 증발하므로 여러 사람이 함께 작업하는 공동 프로젝트에는 사용하지 말 것.
git push -u origin +REMOTE_REPO_BRANCH
예) git push -u origin +main
위의 명령을 실행하면 리모트 브랜치에 강제로 push 해서 덮어 써 버리게 된다.
오늘 오랜만에 자바스크립트 fetch API로 파일 업로드를 할 일이 있었는데 참으로 멍청한 실수를 했음.
input[type=file] 의 files 값을 받아왔어야 했는데 value를 받아서 넘기는 바람에 컨트롤러가 파일이 없다고 에러를 뿜어댄 것.
요약)
document.querySelector('input.yourInputClass[type=file]').value (X)
document.querySelector('input.yourInputClass[type=file]').files[0] (O)
오늘의 나는 멍청이 ㅠㅠ
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를 붙여서 표현상에서 발생하는 에러를 무시해주는 것으로 해결하는 방식.
자주 쓰는 기능이기에 간단한 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;
}
결과는 아래 링크에서 확인할 수 있음.
오늘부터 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항목이 있는 열을 삭제해라.
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!
텍스트 속성 조절 가능한 UITextView의 subclass : MYTextFrame예제.
initializeTextBox()의 파라메터에 적절한 값을 넣어 주면 굴러감.
import UIKit
class MYTextFrame: UITextView {
var contentText = NSString()
func initializeTextBox(pathOfTextFile: String, typeOfExtension: String, spaceOfLine: CGFloat, canScroll: Bool, canEdit: Bool){
//Text path
let filePath = NSBundle.mainBundle().pathForResource(pathOfTextFile, ofType: typeOfExtension)
//Text file to string
do {
contentText = try NSString(contentsOfFile: filePath!, encoding: NSUTF8StringEncoding)
} catch {
contentText = "text is not found."
}
//Line Spacing
let lineSpaceAmount = NSMutableParagraphStyle()
lineSpaceAmount.lineSpacing = spaceOfLine
self.attributedText = NSAttributedString(string: contentText as String, attributes: [NSParagraphStyleAttributeName:lineSpaceAmount])
//Scrollable?
self.scrollEnabled = canScroll
//Editable?
self.editable = canEdit
}
}
SNS 프로필 사진에서 쓰이는 방식과 같이 원형 프레임 안에 사진을 넣고 비율을 맞추는 코드.
import UIKit
let myView = UIImageView(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) //이미지뷰 만들기
myView.layer.cornerRadius = myView.frame.width / 2 //프레임을 원으로 만들기
let myImage = UIImage(named: "bruceLee.gif") //이미지 객체 생성
myView.image = myImage //이미지를 이미지뷰에 넣기
myView.contentMode = UIViewContentMode.ScaleAspectFill //이미지 비율 바로잡기
myView.clipsToBounds = true //이미지를 뷰 프레임에 맞게 clip하기
Segue를 이용해서 다른 ViewController에 데이터 전달하는 코드
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "targetSegue"){
let targetView : targetViewController = segue.destinationViewController as! targetViewController
targetView.targetVariable = thisViewControllerVariable
}
}
이쪽 뷰 컨트롤러의 thisViewControllerVariable 변수 값을 targetViewController의 targetVariable이라는 변수에 전달한다.
targetViewController에서는 targetVariable 이라는 변수를 선언하면 값은 자동으로 전달됨.