'단조롭고 즐거운 일상 > 먹먹글' 카테고리의 다른 글
더블포테이토피치세트 먹먹 (0) | 2016.10.30 |
---|---|
신촌 SICTAC 먹먹 (0) | 2016.10.25 |
BBQ 자메이카 먹먹 (0) | 2016.10.25 |
귤먹 (0) | 2016.10.25 |
닭발 먹먹 (0) | 2016.10.25 |
더블포테이토피치세트 먹먹 (0) | 2016.10.30 |
---|---|
신촌 SICTAC 먹먹 (0) | 2016.10.25 |
BBQ 자메이카 먹먹 (0) | 2016.10.25 |
귤먹 (0) | 2016.10.25 |
닭발 먹먹 (0) | 2016.10.25 |
서론.
우리 사이트 내 다음 5가지의 공유 기능이 붙어야 했다.
모든 기능은 각 api의 개발 문서를 참고해서 스크립트만으로 쉽게 만들 수 있다.
쉽게 만들 수 있지만, (항상 그렇듯이) 내가 하려던 것이 되지 않아 애를 먹었다.
그거슨 바로 5. 네이버 공유하기 기능.
네이버 공유하기 기능에 대한 개발 문서는 다음에서 찾아볼 수 있다.
https://developers.naver.com/docs/share/navershare
첫번째 당황. 하란대로 했는데요..?
넘나 간단하고 명료한 예시에서는 다음과 같이 하면 된다고 하는데... 8ㅅ8 거짓부렁이다.
인코딩 : UTF-8 요청방식 : GET방식 http://share.naver.com/web/shareView.nhn?url=인코딩한URL값&title=인코딩한title값
# | 파라미터 | 값 | 설명 |
---|---|---|---|
1 | url | 문자열 | 인코딩한 공유할 웹 URL |
2 | title | 문자열 (optional) | 인코딩한 제목 문자열 |
음... title이 optional이라고 되어있는데, title을 넣어주지 않으면
"url 또는 title 정보가 없습니다." 라는 alert이 뜨면서 안된다.
url과 title모두 인코딩해서 넘겨주어야 에러가 나지 않는다 :)
스크립트로는 다음과 같이 작성해주면 된다.
<button type='button' id='naver_share'>네이버 공유 버튼</button>
<script>
$("#naver_share").click(function(e) {
var share_url = '공유할 url주소';
var title = '포스팅/글의 제목';
var url = 'http://share.naver.com/web/shareView.nhn?url='+encodeURIComponent(share_url)+'&title='+encodeURIComponent(title);
window.open(url);
});
</script>
두번째 애먹음. 썸네일 왜 그래요.. url.. 왜 나한테 그래요...
우리사이트 내에서 공유할 주소에는 각 사용자의 추천코드가 함께 붙어있다. 즉, 공유된 블로그/카페의 포스팅을 타고 들어오면, 추천코드가 함께 붙어있어야 하는데....
네이버 공유하기 api로 포스팅 된 것에는 썸네일과 링크가 마음대로 붙어버렸다.
이를 테면, 내가 공유하려던 url이
http://prosaist0131.tistory.com/8 이라면,
링크가 자꾸 http://prosaist0131.tistory.com으로만 붙어버렸다. 썸네일도 마음대로 되지 않았다.
애를 먹다가, 네이버 개발자 포럼을 확인하다 다음의 질문 글을 발견하였다.
http://forum.developers.naver.com/t/topic/1133
글을 읽어보니, 네이버는 http://ogcrawler.blog.naver.com/crawler.json 를 통해서, 링크의 정보를 가지고 오는 것 같다는 거였다.
해당 crawler.json에 내가 공유하려던 url을 확인해보았다.
썸네일과 링크가 내가 공유하려는 페이지의 메타 태그에 있는 것으로 연결이 되고 있었다.
그래서 다음과 같이 간단히(?) 해결했다.
내가 공유하려고 했던 페이지 url을 메타태그로 가진 페이지를 만들어서 그 페이지를 공유하도록 했다.
예를 들면 다음과 같다.
<!DOCTYPE html>
<html>
<head>
<title>페이지 이름</title>
<!-- meta info -->
<meta name="keywords" content="키워드들">
<meta name="description" content="설명">
<meta property="og:title" content="페이지제목 "/>
<meta property="og:image" content="원래 공유하려고 했던 썸네일 이미지"/>
<meta property="og:url" content="원래 공유하려고 했던 페이지 URL"/>
<meta property="og:description" content="구체설명"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta charset="utf-8">
(생략).
해결~ 끄읏...
memcached increment always return false codeigniter (0) | 2018.07.19 |
---|---|
클린코드 PHP를 번역해보았다 - fork부터 PR까지 (5) | 2018.02.21 |
메일건 트랙킹 (0) | 2016.12.08 |
암호화한 코드 링크 유의사항 (0) | 2016.10.28 |
트리에 대하여
/*
서론.
그래프를 먼저 공부하고 트리를 정리했어야했는데 조금 아쉽다.
트리는 그래프의 한 종류이기 때문이다.
트리로 검색했을 때 중복되어 나오는 결과들은 다음과 같다.
- In case of binary search trees (BST), Inorder traversal gives nodes in non-decreasing order. To get nodes of BST in non-increasing order, a variation of Inorder traversal where Inorder itraversal s reversed, can be used.
- Preorder traversal is used to create a copy of the tree. Preorder traversal is also used to get prefix expression on of an expression tree. Please see http://en.wikipedia.org/wiki/Polish_notation to know why prefix expressions are useful.
이진탐색트리에서는 탐색, 삽입, 삭제 세가지 연산을 할 수 있다.
삭제의 경우만 탐색이나 삽입보다 복잡한 편이다.
삭제하려는 노드가 단말 노드인 경우는 링크를 null로 만들어 주면 되고
삭제하려는 노드가 하나의 자식노드를 가지고 있을때에는 자식 노드가 그 자리를 대체한다.
삭제하려는 노드가 두개의 자식 노드를 가지고 있을 떄에는 왼쪽 서브트리에서 가장 큰 값으로 대체하거나,
오른쪽 서브트리에서 가장 작은 값의 노드로 대체한다.
그러나, 1이라는 노드를 탐색한다고 가정하면, 두 트리의 탐색 속도는 오른쪽이 빠르다.
트리의 균형이 맞지 않으면, 왼쪽 처럼 그냥 일반 연결리스트에서 찾는 것과 다름없게 된다.
레드블랙트리, 비트리, AVL트리는 이러한 문제를 해결하기 위한 방법으로 고안된 발전된 고급 이진트리들이라고 생각하고 있다.
비트리(B-tree)는 자식을 두개만 가질 수 있는 이진 트리를 확장하여 더 많은 자식을 가질 수 있으며 자동으로 균형을 맞춘다.
레드블랙트리는 이진 트리에 색상이라는 속성을 노드에 추가하여 자동으로 균형을 잡도록 만드는 트리이다.
AVL트리도 LR회전 LL회전 RR회전 RL회전 등을 통해서 자동으로 트리의 균형을 맞추기 위해 만들어진 알고리즘이다.
그래프 (0) | 2016.10.25 |
---|---|
Array 와 ArrayList 와 LinkedList 의 차이 (0) | 2016.07.10 |
/*
서론.
자료구조를 공부하면서 Array를 배웠고, LinkedList를 구현하는 법도 배웠다.
JAVA 수업을 들으면서 ArrayList를 사용했다.
얼핏 기억하고 있던 각 자료구조의 특징은 다음과 같다.
창피하지만 그 차이가 뭔지 와닿지가 않았고, 이해가지 않았다.
DP로 자료구조 공부를하면서 이제야 조금 이해했다. 물론, 아직 다 이해하지 못했을 것이다.
이걸 그동안 몰랐다니 넘나 부끄럽지만 나중에라도 다시 이 바보스러움을 느끼기 위해 조금이나마 이해한 바를 정리해본다.
*/
1. array는 뭘까?
array는 뭘까? array는 배열이지.
일반적으로 array는 array의 크기와 데이터 타입을 함께 선언해야 한다.
이를테면, 이런식으로
int arr[6];
String arr[12];
array는 왜 선언하기 전에 자료형과 사이즈를 함께 적어줘야할까? 뭐 배열이 커질수도 있구 어떻게 될지 알지도 못하는 일인데 말이다.
int arr[6]을 예로 들면, 괄호 안 6은 배열의 길이를 뜻한다. int형 데이터가 들어갈 공간 6개가 메모리 공간에 할당된 것이다.
즉, 특정 자료형의 변수가 들어갈 공간을 몇개나 할당할지를 정한다.
array는 데이터를 줄줄이 저장한다. 그래서 각 데이터가 줄줄이 저장될 것이기 때문에 자료형을 미리 적어주어야 한다.
array는 데이터를 찾는게 빠르다.
왜? index가 있으니까. 이 array는 데이터를 줄줄줄 저장하다 보니까. 위치를 바로 알 수가 있다.
내가 arr[4]를 찾는다고 하면 arr라는 것의 주소값에서 바로 +4만해서 찾으면 되니까. 검색이 빠르다.
array[4]에다가 t새로운 값을 넣으면 어떻게 될까? 덮어씌워진다.
array[4]를 삭제하면 어떻게 될까? 그냥 텅 비어있을 뿐이다.
그래서 arrayList가 나오게 된다.
2. List는 뭘까?
나는 넘나 헷갈렸었다. 무엇이? array나 list나 그게 뭔 차이가 있는 건지.
array와 list의 가장 큰 차이점은.
array는 크기를 정해주어야 한다는 것. index가 중요하다는 것.
list는 크기가 정해지지 않아도 된다는 것. 순서가 중요하다는 것이다.
이 차이를 알기 위해 arrayList를 보자.
array에서는 arr[4]에 새로운 값을 대입하면 덮어씌워진다.
array에서는 arr[4]를 삭제하면 텅비어있다.
arrayList에서 만약 arrList.add()하면 어떻게 될까? 4번째 에다가 더한다면? 그러면 얘는 4번쨰에 들어간다.
arrayList.remove()하면 어떻게 될까? 다 줄줄이 당겨진다.
그래서 arrayList에서 값을 맨앞에 넣거나 맨뒤에 넣으면 상관이 없는데 중간에 값을 더하거나, 빼면 오래걸리는 거다.
대신 array의 성질, 즉 index를 그대로 가지고 있기 때문에 자료를 검색하는데는 빠르다.
List는 크기를 미리 정해줄 필요가 없다. 쭉쭉 이어진다.
LinkedList는 그럼 어떨까?
단일 연결리스트, 다중 연결리스트 등. 여러 Linked list가 존재한다.
단일이든, 다중이든 링크드 리스트는 한 노드에 연결될 노드의 포인터 위치를 가르킨다.
다중은 앞뒤 모두 다 가르키는 거고, 단일은 뒤에것만 가르키는 거구
이렇게 되니까, 데이터를 중간에 넣고 뺀다고 해도 이전에 가르치는 값, 다음 값이 가르켰던 값만 연결시켜주면 되니 빠르다.
그렇지만 11번 째 값을 찾는다고 생각해보자.
그러면 얘는 맨처음부터 굽이굽이 건너가야 한다. 그래서 값을 찾는데는 arrayList나 array보다는 좀 걸린다.
그래프 (0) | 2016.10.25 |
---|---|
트리에 대하여 (0) | 2016.10.16 |
1.
'코멘토'에서 인턴으로 근무하게 되면서 처음으로 PHP를 접하게 되었다.
첫 출근 날이 16.01.07 목요일인가 금요일인가 그랬으니 PHP란 언어를 사용하게 된지 어느새 6개월이 지나갔다.
2.
IT를 복수전공하고 컴퓨터를 전공했다기엔 너무, 너무나 부족한 기본기. 그리고 넘나 부족한 실전 경험.
보안, 재사용성, 리팩토링, 코드의 간결함, 시간복잡도와 공간복잡도 따위 한번도 고민해보지 않았던 '야매' 대학원생이었던 나는 ASAP이 덕목인 스타트업에서 빠르게 개발하고 적용하는 상황에 이르자 매우 혼란스러웠다.
3.
그래도 여차저차 일해보니 지금이 되었다. 정말 여차저차. (DB를 날리기도하고.. 서버 마비도 시키고.. ) 여전히 개발에 대해서 1도 모르지만, 0.1 정도는 알게 되지 않았나 싶다. 원체 '빠르게'를 모르던 사람이 '빠르게' 일하려다 보니 많은 것을 배우고 있다. 난 좀 빠르게가 필요한 사람이기에.
그렇지만 빠르게 하려다 보니, 모르고 지나가는 것들이 많은 것 같다. PHP의 심볼이 코끼리이며 그 이유는 'PHP'가 코끼리 같이 생겨서 그렇다는 귀여운 사실을 몰랐다. 안드로이드를 경험해봤음에도 불구하고 아직 모르는 것이 많다. SQL도 그렇다.
4.
이제 좀 '학습'이 필요한 시기인 것 같다. 개념을 아무리 외워봤자, 직접 경험해보지 않으면 알 수 없다.
자료구조 수업을 들었고, 성적이 좋은 편이었음에도 불구하고 이제와 Array와 list의 차이를 이해하게 되었다.
사용하는 언어와 자료구조, 알고리즘에 대한 학습이 필요하다.
5.
결론은, 이제부터 열심히 학습해보겠다는 거다.
일하면서 알게된 것들과, 학습한 것들을 정리하고자한다. (아무래도 코멘토에서 사용하는 언어와 기술이 주가 될 것 같다.)
재밌게 정리하고 공부하고 싶다.
나와 같은 혼란을 겪고 있는 쌩초보 개발자들이 공감할 수 있고 도움을 얻어갈 수 있는 블로그, 스스로가 성장하고 있음을 느낄 수 있는 블로그가 되었음 좋겠다.
DDD Start! 정말? (0) | 2018.11.20 |
---|---|
과학과 예술에 대해서, 그리고 Bubblesortzines (0) | 2018.08.17 |
MR과 PR의 차이 (0) | 2018.03.04 |
개발 공부하기 좋은 유용한 사이트 정리 (0) | 2017.10.09 |