블로그 이미지
kalstein

여러가지 프로그래밍 관련이나...신변잡기적인 글들을 남기는 블로그입니다. 지식은 나누는만큼 강력해집니다 ^^

Rss feed Tistory
Programming 2018. 8. 10. 09:56

Git 사용법 끄적끄적

git reset --hard HEAD^ : --hard 를 해야 내가 가진 코드에서 수정된걸 revert 한다.

Programming 2018. 4. 24. 15:56

Eclipse 에서 tab을 space 로 변경하기.

C / C++

  1. Click Window » Preferences
  2. Expand C/C++ » Code Style
  3. Click Formatter
  4. Click the New button to create a new profile, then OK to continue
  5. Click the Indentation tab
  6. Under General Settings, set Tab policy to: Spaces only
  7. Click OK ad nauseam to apply the changes.


Programming/Python 2017. 11. 29. 10:50

사내에서 pip install 사용하기

windows에서 쓸때.


set http_proxy=168.219.61.252:8080
set https_proxy=168.219.61.252:8080

python -m pip install --trusted-host pypi.python.org [pkgname]


하면 진행가능.

Programming 2015. 4. 3. 08:45

find를 이용해서 파일 내용 검색하기

find /path -name "*.log" | xargs grep pattern


파일내용을 검색하고 해당 파일명을 볼수있다.

Programming 2014. 6. 3. 13:25

WWDC 에서 새로운 언어를 발표하다니...

object C 를 그동안 열씨미 해오신 개발자분들은 '아 또 뭐 새로해야되나'

하는 심정일지도. ^^;;


애플의 취지는 이렇지않을까 싶다.


현재 iOS랑 MacOS는 바이너리 호환이 되지않는다.

당연히 한쪽은 x86이고 한쪽은 ARM 이니까.

이걸 깨고 싶은것 같다...


스크립트 언어인 이상, 플랫폼이 지원만 하면 얼마든지 돌아간다.

소스가 공개되는 문제점은 뭐 애플이 알아서 해결할꺼고.

(1차 컴파일된 내용으로 패키징을 한다거나 뭐 그런식.

python도 돌려보면 스크립트를 1차 컴파일한 pyc 파일이 돌아간다)


맥북에어의 신형에 ARM을 올려보는 시험을 하니마니 라는 루머가 돌았었는데

아무리 ARM이 발전했다고 해도 하스웰의 위엄에 따르지는 못하나보다 ㅋㅋㅋ

성능이 안나오는게 앞으로도 ARM이 x86의 성능을 따라가기란 쉽지않다는걸

느꼈을테지. 

  • 냐궁 2014.11.24 09:08 신고 ADDR 수정/삭제 답글

    안드로이드처럼 java기반도 있고,
    하다못해 tcl/tk도 있고..갖다 쓸라고하면 무궁무진하게 많은데..
    왜 또 언어를 새로 만드는걸까..; 애플의 삽질이 되지 않을까 하는..?

Programming/Python 2011. 6. 1. 10:28

Python 느님의 위엄. callback 함수 작성이 너무도 쉽다!

C/C++에서는 callback 함수 한번 작성하려면 상당히도 귀찮다.
대표적인 callback 함수 쓰는게 sort() 라고 볼수있다. (STL에서는 for_each도 있고)
(callback 함수라기보다는 임시함수라고 하자. 그게 더 맞는 표현이니...ㅋ)

간단히 표현하자면, 함수호출시 인자값으로 함수포인터를 넘겨주는건데...
이게 좀 code reading 상 불편한 점이 있다. 왜냐고?

func_A (int i)
{ .... }
func_B(callback_func func)
{
    func(10);
}
main_func()
{
    func_B(func_A);
}

보통 이런 구조가 되는거다.
그러면, main_func을 읽고있다가 func_B 를 호출하는걸 알았다.
근데 func_A는 또 뭐야? 뭘 어떻게 비교하는거지?

이런 불편함때문에 boost lambda라는것도 있다.
저런 함수들은 보통 사이즈가 작고 구문도 간단한 경우가 많다.
그래서 람다 함수로 작성하면 func_A 같은걸 따로 작성하지않을 수 있고
코드 리딩도 쉬워진다.

반면, 복잡한 함수라면? 조금 까다로워진다.
어려운 람다함수를 쓰느니 그냥 func_A를 쓰는게 더 나을수있다는것.
자 그러면 python에서는 어떨까. nested function 선언이 가능하다!

>>> def outer():
       x
= 1
       
def inner():
           
nonlocal x
           x
= 2
           
print("inner:", x)
       inner
()
       
print("outer:", x)


>>> outer()
inner
: 2
outer
: 2

특히나, "nonlocal" 키워드를 통해서, 일반 function과의 변수를 공유할수도 있다.
(공유하기 싫으면 "nonlocal x" 만 지워버리면 된다. 그럴경우 outer의 x와 inner의 x는 전혀 별개의 변수)
정말 python은...쓸수록 귀요미인듯 =_=;;;
  • rein 2011.06.07 15:55 ADDR 수정/삭제 답글

    C++에도 비슷한 기능이 추가되었습니다 (C++ 11 a.k.a C++ 0x).
    최근에 나온 컴파일러들 (ICC 11, GCC 4.5+, VS 2010)에도 들어가 있는 기능인데요, 저 비슷하게,

    sort(v.begin(), v.end(), [=](const int &a, const int& b) { return a< b;}); 하는 식으로 익명함수를 단축해서 쓸 수 있습니다. 표준에 맞게 구현된 STL 컨테이너/알고리즘이나, TBB parallel_? 류에서도 그냥 쓸 수 있게 되어있습니다.

  • rein 2011.06.07 15:55 ADDR 수정/삭제 답글

    저도 예~~전에는 boost::function 써서 클로져 비슷한거 만들어 썼는데, VS 2010에서 짜는 코드베이스는 전부 C++ 0x lambda를 쓰는 형식으로 바꿨습니다

    • kalstein 2011.06.13 16:57 신고 수정/삭제

      오...

      C++은 더이상 뭘 얼마나 더 붙일까요 ㅋㅋㅋ
      조만간 스크립트 언어도 진출할기세? ^^;

Programming 2011. 6. 1. 10:12

클로져(closure)란게 뭐지?

난 C/C++ 를 더 오랫동안 잘 써왔다.
최근들어서 그래도 이리저리 뒤적거리는게 python.
C/C++에 비해 유지보수의 장점도 있고, 기본제공되는 라이브러리도 다양하고, 여튼 상당히 괜찮은 느낌이라서 사용중인데... closure라는게 있길래 좀 살펴봤다.

알아보니..음 뭐랄까. C++의 binding과 비슷했다. (boost 의 bind)
a,b를 인자로 가지는 func(a,b)이 있다손 치면, b라는 녀석을 고정시키고 func(a)를 만들어낸달까.

뭐 사실... 그닥 실용적인 예제는 모르겠다. -_-;;;;
굳이 꼽자면 Command 패턴에 사용하기 좋다는것. (bind를 활용해서도 잘 쓰니까...)
그정도...? 그래도 이런게 언어적으로 지원되는거랑 안되는거랑은 많이 차이난다.
쓸려고하는데 지원이 안되면 꼼수로 뱅뱅 돌아가야되거든...ㅎ

Programming 2011. 2. 23. 15:39

Valgrind 사용법

캐쉬만 사용하니까 그것만 언급함. (hit/miss 만 볼것이므로)

valgrind --tool=cachegrind [실행파일]

끝!
valgrind
Programming 2011. 2. 17. 17:25

Oprofile 사용법

gcc는 실제사용 할때와 동일하게 컴파일. (-g 옵션을 하면 opannotate 를 사용할 수 있다.)

   – $ opcontrol --reset
   – $ opcontrol --event=[추가할이벤트]   (디폴트는 CPU cycle)
   – $ opcontrol --start (--no-vmlinux)
   – 여기에서 실제 벤치마킹 수행
   – $ opcontrol --dump
   – $ opcontrol -h
   – $ opreport -l  [실행파일]
   – $ opannotate --source [실행파일]   ===> c 소스파일에 각 라인별 counter가 나온다.


각 CPU 별로 추가할 event는 http://oprofile.sourceforge.net/docs/ 참조.
oprofile, Profiler
Programming 2011. 2. 17. 13:50

gcov 사용방법

gcov는 gcc와 함께 사용되는 code coverage 툴이다.
사용방법을 기재해둔다.

1. 연관된 gcc 옵션 : compile : -g --coverage  / link : -fprofile-arcs
2. 1번의 옵션으로 컴파일 후 실행.
3. gcov -b [소스파일]
4. 소스파일.gov 를 본다.


gcov
TOTAL 38,593 TODAY 3