반응형

OS: Windows 10 (64bit)

App: Git Bash


크롬 브라우저를 통해 git 원격 저장소(repository)의 주소를 복사하고, 이것을 윈도우에 설치한 Git Bash 쉘에 붙여넣기를 했다. (마우스 오른쪽 단추를 눌러서 Paste 선택) 이렇게 해서 기존의 git 저장소에 원격 저장소를 연결하고 푸쉬를 했더니, 황당한 에러 메세지가 나왔다.

fatal: protocol 'https' is not supported



아니 이게 뭔... 깃허브와 빗버킷 모두 잘 쓰고 있는 https가 안되는 건 도대체 무슨 소리인가 어이가 없어서 찾아 보니, 스택오버플로우에서 같은 문제를 호소하는 질문을 찾을 수 있었다. 

결론부터 얘기하면, 인터넷에서 복사한 텍스트를 콘솔에 바로 붙여넣기 하지 말라는 것...


우선 직접 git remote -v 명령으로 Git Bash 창에서 확인을 해봐도 잘못 입력된 문자 같은 건 보이지 않는다. 그러나, 해당 에러 메세지를 긁어서 복사하고, 여기 티스토리 에디터에 붙여넣어 보니...

USER@bhshin-desktop MINGW64 ~/source/repos/SWTest190720 (master)

$ git pull

fatal: protocol '–https' is not supported


https 글자 앞에 원래 보이지 않던 저 네모칸이 나타났다. 무슨 글자였는지 모르지만, 저것 때문에 알 수 없는 프로토콜이라는 에러가 난 것이었다.

그래서 git remove remove origin으로 삭제하고, 직접 키보드로 주소 전체를 처음부터 끝까지 타이핑을 해서 git remote add를 새로 했다. 그 뒤에는 git pull이나 git push 명령이 모두 정상적으로 작동하였다.


역시 기본적인 것에서 황당한 에러가 난다면 (마치 코딩을 100줄도 안 했는데 컴파일 에러가 100개 가까이 되는 경우), 당연하다고 생각하던 기본적인 부분에서 혹시 오류나 실수가 없었는지 봐야 한다.



반응형
블로그 이미지

Bryan_

,
반응형

Tested: Windows 10 (Git Bash), Ubuntu 16.04 (git)


현재 컴퓨터의 로컬 폴더에 있는 git 저장소가 가리키고 있는 (등록되어 있는) 리모트 저장소(remote repository) 이름과 URL을 확인한다:

$ git remote -v


$ git remote -v

origin  https://aaa.bb/ccc.git (fetch)

origin  https://aaa.bb/ccc.git (push)



특정한 별칭에 대하여 등록된 리모트 저장소의 주소를 변경하는 방법은 두 가지가 있다.

(1) 기존의 별칭으로 등록된 리모트 저장소의 주소를 변경하기 (set-url)

$ git remote set-url [별칭] [URL]

예: 

$ git remote set-url origin https://eee.ff/ccc.git



(2) 기존의 별칭으로 등록된 리모트 저장소를 삭제하고 새로 추가하기

$ git remote remove [별칭]

$ git remote add [별칭] [URL]

예: 

$ git remote remove origin

$ git remote add origin https://eee.ff/ccc.git






반응형
블로그 이미지

Bryan_

,
반응형


JSP에서 자바 코드를 써서 image orientation을 먼저 알아내고,

orientation 숫자를 기준으로 회전해야 할 각도를 구해서 CSS가 회전을 수행하는 방식이다.



1. 필요한 라이브러리 다운로드 및 적용


이미지의 EXIF 정보에서 orientation을 알아내야 하기 때문에 Metadata-extractor를 쓴다.


[직접 다운로드 또는 사용법 설명]

https://github.com/drewnoakes/metadata-extractor


[Maven]

<dependency>
  <groupId>com.drewnoakes</groupId>
  <artifactId>metadata-extractor</artifactId>
  <version>2.9.1</version>
</dependency>

[Gradle]

 - dependencies에 추가

compile group: 'com.drewnoakes', name: 'metadata-extractor', version: '2.9.1'



2. 소스코드 작성


2-1. Metadata-extractor 기반의 자바 코드:


Java의 File 오브젝트를 사용해서 이미지 파일의 메타데이터 알아내는 Java 클래스를 정의한다.


import java.io.File;

import java.io.IOException;


import com.drew.imaging.ImageMetadataReader;

import com.drew.imaging.ImageProcessingException;

import com.drew.metadata.Directory;

import com.drew.metadata.Metadata;

import com.drew.metadata.MetadataException;

import com.drew.metadata.exif.ExifIFD0Directory;


public class ImageUtil {

/**

* Gets the orientation of an image (usually photo).

* Outputs:

* 6: rotate 90,

* 1: original (no change)

* 3: rotate 180,

* 8: rotate 270,

* others: original (no change)

* @param in a File object to check

* @return orientation value

* @throws IOException

*/

public static int getOrientation(File in) throws IOException {

int orientation = 1;

Metadata metadata;

Directory directory;

try {

metadata = ImageMetadataReader.readMetadata(in);

directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);

if(directory != null){

orientation = directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);

}

} catch (ImageProcessingException e) {

System.err.println("[ImgUtil] could not process image");

e.printStackTrace();

} catch (MetadataException e) {

System.err.println("[ImgUtil] could not get orientation from image");

e.printStackTrace();

}

return orientation;

}

public static int getDegreeForOrientation(int orientation){

int degree = 0;

switch(orientation){

case 6:

degree = 90; break;

case 1:

degree = 0; break;

case 3:

degree = 180; break;

case 8:

degree = 270; break;

default:

degree = 0; break;

}

return degree;

}

}



2-2. CSS 정의


실제로 이미지 회전을 수행하는 CSS 코드를 작성한다. 

html 파일에서 <head> 태그 안에 넣거나, 별도로 쓰는 css파일에 추가한다.


<style type="text/css">

.rotate90 {

   -webkit-transform: rotate(90deg);

   -moz-transform: rotate(90deg);

   -o-transform: rotate(90deg);

   -ms-transform: rotate(90deg);

   transform: rotate(90deg);

}

.rotate180 {

   -webkit-transform: rotate(180deg);

   -moz-transform: rotate(180deg);

   -o-transform: rotate(180deg);

   -ms-transform: rotate(180deg);

   transform: rotate(180deg);

}

.rotate270 {

   -webkit-transform: rotate(270deg);

   -moz-transform: rotate(270deg);

   -o-transform: rotate(270deg);

   -ms-transform: rotate(270deg);

   transform: rotate(270deg);

</style>



2-3. JSP 소스코드


먼저 2-1에서 만든 자바 클래스를 JSP에 import한다.

<%@ page import="ImageUtil이_포함된_패키지_이름.*" %>



<%

String filePath = "이미지_파일의_경로";

File f = new File(filePath);

int orientation = ImageUtil.getOrientation(f);

int degree = ImageUtil.getDegreeForOrientation(orientation);


if(degree != 0){

%>

<img src="이미지_파일의_경로" class="rotate<%=degree%>">

<%

} else {

%>

<img src="이미지_파일의_경로">

<%

}

%>




반응형
블로그 이미지

Bryan_

,
반응형


정말 놀랐다.

OpenSSL 같이 전세계 인터넷에 막대한 영향력을 미치는 프로젝트가 최근(2014년)까지도 고작 2명의 핵심 프로그래머가 자기 희생을 해 가면서 지켜 왔다는 사실을 모르고 있었다. 제아무리 오픈소스라 해도 어느 마음씨 좋은(?) 큰 규모의 재단의 도움으로 비교적 안정적으로 운영되리라 막연하게 믿고만 있었는데, 내가 너무 이상적이었을 수 있겠다.


그리고 중국은 정말... 함부로 평가할 수가 없는 것 같다.

OpenSSL에 단일 기부금액으로 최고치, 그것도 프로젝트 시작 이래로 이전과 비교할 수 없는 압도적인 규모의 기부금을 조건 없이 후원한 사람이 중국의 소프트웨어 회사 대표라니.


비록 내가 중국을 바라볼 때마다 감정적으로 받아들이기 어려운 몇 가지 특징들부터 떠오르는 것을 어찌할 수 없지만, 한편으로는 우리나라와 비교하기에 이미 아득하게 큰 나라에 거주하는 수많은 사람들 중에서 내가 상상할 만한 모든 종류의 사람은 다 존재한다고 보는 것이 타당할 것이다.


나는 어떤 사람이 될 수 있을까?

소신을 지키는 사람이 되고 싶다면 내가 지키고 싶은 소신은 도대체 무엇인가?


사실 OpenSSL 프로젝트의 자리를 끝까지 지켜 온 스티브 마퀴스처럼, 인생을 어느 정도 살아본 후에야 내릴 수 있는 과감한 결정을 지금 내가 성급하게 내릴 필요는 없을 지도 모른다. 지금의 내가 없어도 세상이 잘 돌아가고, 내가 나만의 스타일로 슈퍼히어로가 되어야 할 부분이 아직은 보이지 않는다. (당연하지 졸업이 급하니까 @_@)


적어도 무엇이 되었든 간에 나의 경제적 변화에 연연하지 않을 만큼의 열정과, 남들도 내 열정을 인정해 주기 위한 최소한의 실력은 갖고 싶다.


(그런 실력을 위해서 일단 내 논문부터 빨리 끝내 보자. ㅡㅡ)


반응형
블로그 이미지

Bryan_

,
반응형

CSS에서 width, height에 픽셀을 직접 입력하면 항목의 크기가 고정이 되고, 각각을 %로 하면 항목 내부에 높이가 다른 이미지를 다루는 경우에 서로 높이가 달라진다.


width의 경우에는 화면 너비의 %로 지정하고, 그 width와 동일한 값 또는 width의 비율로 표현되는 어떤 값을 height에 적용하고 싶을 때는 vw 단위를 쓸 수 있다.



CSS:


.test {

width: 100vw;

height: 80vw;

}



HTML:


<div class="test">

<img src="......(크기가 서로 다른 이미지)">

</div>



물론 이 방법은 무조건 요소(div)의 크기를 화면 너비에 맞춰서 일정한 비율로 유지하는 데 있으므로, 이미지의 고유한 비율은 당연히 망가지게 된다. 그것을 감수하고 박스 크기를 강제 지정하고 싶을 때 쓰면 될 것 같다. (가령 비디오 플레이어 같은 요소의 크기 지정할 때)




<참고자료>


[1] http://stackoverflow.com/questions/21537806/css-height-same-as-width

[2] https://drafts.csswg.org/css-values/#vw



반응형
블로그 이미지

Bryan_

,