2014년 5월 1일 목요일

glib 설치

glib 설치방법

취업 후 C언어만 하게 되었는데, 회사에서는 여러 C언어 라이브러리들을 사용하고 있었다.
그래서 나도 이번기회에 회사에서만 하지 말고, 집에서도 비슷한 환경을 만들어 이해를 높이고 익숙해지도록 하려고 설치해본다.

  • 설치환경
    • vmware9
    • linux mint 3.2.0-23(i386)
  1. 일단은 glib 를 임의의 디렉토리에 다운받는다.
    wget http://ftp.gnome.org/pub/gnome/sources/glib/2.40/glib-2.40.0.tar.xz

  2. 다운받은 파일을 압축을 푼다.
    tar xvf glib-2.40.0.tar.xz

  3. configure를 실행한다.
    cd glib-2.40.0/
    ./configure

  4. 중간중간 없다고 하는 패키지들을 설치해가면서 진행해야 한다.
    나는 libffi가 없다고 나왔는데 이것 역시 apt-cache search libffi 로 검색하여 이름을 보고 설치하였다.

  5. make를 실행하고 make install을 실행한다.

  6. pkg-config --cflags --libs glib-2.0 을 실행하면 다음과 같이 출력되면 올바르게 설치된거다.
    -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglib-2.0

  7. 샘플소스를 만들어 gcc 로 컴파일 해보자.
    ==gcc `pkg-config —cflags —libs glib-2.0` test.c 가 잘 실행이 되면 끝난것이다.

2014년 2월 12일 수요일

bash shell에 색 입히기

bash shell에 색 입히기

vmware를 설치하고 매번 *Nix계열의 OS를 설치하면 매번 하는 작업이 있는데 그 작업을 매번 하면서도 자주 잊어먹기에 글을 남긴다.

  1. 색이 입힌 .bashrc파일을 구한다.(root계정에 있다면 복사해준다.)
  2. .bash_profile을 홈폴더에 생성한다.
  3. .bash_profile의 내용을 아래와 같이 바꾸어 준다.

.bash_profile

source .bashrc

아주 간단하게 해결할 수 있다.

php + mysql(mariadb) + boost 진행


boost에 vs2012 64bit로 구성하였다.

네트워크 쪽을 검색하던 중 http://rhea.pe.kr/494 분의 블로그에서 금쪽같은 자료로 공부를 진행해보기로 했다.



1. 1.zip을 다운받아 vs2012용으로 만들고 boost 경로를 수정해주었다.



2. 강좌2번을 하던 중에 데이터베이스 얻어오는 부분을 살짝 넘어가셨더라... 그래서 집에 있는 mariaDB가 설치된 odroid를 써먹으려고 고민했었다.


3. mysql connector c++ 버전이 있더라..(http://dev.mysql.com/downloads/connector/cpp/)
이걸 설치하고 developer 가이드 대로 진행을 했는데 뭔가 잘 맞지 않는다. 실력부족인 탓인가..
http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html
이걸로 해결하신 분은 어떻게 하는지좀 알려달라 ㅠㅠ 포함디렉토리 링크 디렉토리를 모두 잡고 해봐도 안되더라...
mysql connector로만은 불가능인것 같다.


4. 몇시간을 찾고 찾은 후에야 그냥 mysql db의 library를 설치하고 진행을 했었다.


5. 그런데 무슨 문제가 있는지 로그인이 안되더라...


6. 방화벽때문인가 하고 방화벽도 해제 해 주었다.

sudo ufw allow mysql
sudo ufw enable


7. 3306포트가 열렸는지 확인한다.
netstat -tln


8. 그래도 telnet으로 연결이 되지 않는다.


9. 찾다가 이 분의 블로그를 찾았다.

9-1. MySQL에 권한 설정 해주기

prompt> mysql -u root -p
prompt> use mysql;
prompt> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'password';
prompt> flush privileges;

여기서 3번째 줄에 주목하자.
*.*             =>데이터베이스명.테이블명
root            => 계정명
password    => 계정의 패스워드

그리고 4번째 줄
flush privileges;    => 서버에 권한이 변경되었음을 알리고 즉시 반영되도록


9-2. MySQL 환경 설정 변경

prompt> vim /etc/mysql/my.cnf
bind-address = 127.0.0.1 을 찾아서 주석처리 (제일 앞에 # 붙이면 주석)


9-3. MySQL 다시 시작하기

prompt> /etc/init.d/mysql restart



10. mysql -h 자신의주소 -u root -p
를 해서 접속이 되나 확인해보자
비밀번호는 저 빨간글씨를 써야된다.


된다면 이미 끝난거나 다름없다.



11. 하지만 나는 아까 테스트에서 많이 암호를 틀렸기에...
Host '192.168.0.4' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

가 나온다.

이럴때는 mysql에 직접접속, 다른ip로 접속해서

flush hosts;

를 쳐주자



하루종일 삽질만 한것 같다. 내일부터는 진도를 나가봐야할듯하다.

2014년 1월 22일 수요일

프로젝트 1차적 완료


1차적으로 완료해서 친구들에게 뿌려준 뒤 1차적으로 버그를 잡았다.

UI는 기능을 구현하고 나서 새롭게 프로그램을 만들어야 할듯 ㅠ

일단은 여기서 기능을 추가해야 될듯하다.



Qt의 static build가 어려웠었다 ㅠㅠ








2014년 1월 14일 화요일

Qt 이미지 출력


Qt에서 이미지 출력하는 방법

보통 QLabel에 출력하는 방법을 많이 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QString img_path = "C:/AMD/SDC11388.JPG";
    QImage img(img_path);    
    QPixmap buf = QPixmap::fromImage(img);
 
    ui->label->setPixmap(buf);
    ui->label->resize(buf.width(), buf.height());
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 



QGraphicsView에 출력하는 방법도 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include <QPixmap>
#include <QGraphicsView>
#include <QGraphicsScene>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    QString img_path = "C:/AMD/SDC11388.JPG";
    QImage img(img_path);    
    QPixmap buf = QPixmap::fromImage(img);
    
    buf = buf.scaled(1024,1024);
 
 
    QGraphicsScene* scene = new QGraphicsScene;
    ui->graphicsView->setScene(scene);
 
    scene->addPixmap(buf);
 
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 


2014년 1월 10일 금요일

프로젝트의 시작 - Domino 이미지 이어붙이기


간단하게 이미지를 불러와서 이어붙이는 프로그램을 만들어 보고 있다.


예전에 나도 한번 이어붙이는 작업을 해봤는데 포토샵으로는 너무 힘들었던 기억이 있어서 좀더 쉽게 했으면 좋겠다는 조그마한 바람에서 프로그램을 만드는 계기가 되었다.


QT를 공부하고 있으니, QT로 만들어서 *nix, Window 두군데서 모두 사용할 수 있는 프로그램이 목적이다.


사실 이건 12월 중순부터 생각했었는데 QT에 대해 공부하느라 조금 늦어지고 있다.


대략적인 디자인을 아이튠즈같이 해서 꾸며놨는데...

아이튠즈 스타일..?

내가 구현하기에는 너무나 힘들었다 ㅠㅠ



그래서 방향을 조금 틀어...

기본적인 윈도우 탐색기처럼 구현하기로 했다.


그런데 기본적인 탐색기라고 생각했는데 구현중 고려할게 많았다.

간단하게

사용자가 TreeView에서 디렉토리를 선택한다 → 선택한 디렉토리의 파일들을 읽는다 → 이미지 파일을 확장자로 필터링하고 읽을 수 있는 이미지 리스트를 생성한다 → ListModel에  이미지를 읽어 파일이름과 Icon을 출력한다. → ListView에 ListModel을 적용시킨다.


1. 속도
2. 메모리

첫번째는 이미지가 크면 불러오는 시간이 길다. 그러므로 디렉토리를 선택하면 썸네일을 생성해야 되는게 아닐까??
하지만 썸네일도 이미지로부터 읽어오는 것인데, 캐싱하지 않는 이상은 속도가 똑같지 않을까? 
EXIF포맷에 썸네일이 있어요!!
EXIF포맷이 썸네일을 따로 저장하지만 모든 이미지 포맷이 썸네일을 꼭 저장하지는 않으므로...

당근을 조그맣게 만드려면 썰어야 하는수밖에..??
이미지 출처 http://season4.tistory.com/m/post/view/id/253




두번째는 메모리 관리다. 만약 이미지가 만장이 있다면 메모리를 어떻게 관리해야할까?
지금처럼 무작정 한다면 메모리가 넉넉한 PC에서도 죽게 될것이다.
이 문제는 스마트폰에서도 자주 접하게 되는데, 트위터나 페이스북같이 이미지+텍스트가 많을때는 사용자에게 보이는 부분만 읽어와서 그려주면 된다고 하더라...
이걸보고 ViewHolder패턴이라고 한다.



문제되는 점
지금은 이미지 리스트를 생성하고 Listitem을 하나하나 파일에서 읽어와서 ListModel 추가하고 마지막으로 View를 업데이트 하는 방식으로 되어있다.
지금 이 때의 문제는 고해상도 이미지 파일을 읽을 때이다. 만약 디렉토리에 100개 이상의 고해상도 이미지 파일이 있다면 ListModel에 모두 추가하기전까지는 View에 업데이트가 되지 않을 것이다.
지금 현재 이 문제를 겪고 있고, 해결해야 하는 제일 첫번째 문제점이다.
Model/View 프로그래밍을 다시 생각해 볼 시간인듯하다.

진행하다보니 쉽게 생각했던 프로젝트가 여러가지 고민거리를 안겨준다.