Programming/xml2014. 11. 21. 18:53
DOM은 트리구조로 전체 내용을 파싱해서 사용하므로
수정,삽입 이나 복수 처리에 유리하다

SAX는 이벤트 드리븐 방식으로 element 나 attribute 단위로 이벤트가 발생하여 파서를 구성하며,
순차적으로 처리하며 부분적으로 파싱이 가능하지만 수정이나 추가 삭제에 불리한 구조이다
대신 SAX가 DOM 보다 단일 건에 대해서는 빠르게 파싱한다고 한다.

[링크 : http://en.wikipedia.org/wiki/Document_Object_Model]
[링크 : http://en.wikipedia.org/wiki/Simple_API_for_XML]
[링크 : http://sulemi.egloos.com/viewer/1133994]

xmllite는 ms에서 개발한것 같은데
[링크 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms752872(v=vs.85).aspx]

expat과 비슷할 정도로 빠르다고 벤치마크에 나온다.
[링크 : http://blog.daum.net/aswip/8429353]
 
문제는... expat이 2007년 이후로는 개발이 안되고 있다는 점..?
 

'Programming > xml' 카테고리의 다른 글

libxml2  (0) 2019.07.04
xmlstarlet  (0) 2016.05.26
xml parser 선택 / 종류  (0) 2014.11.21
DTD / XSD  (0) 2014.11.11
xml benchmark  (0) 2014.11.10
Posted by 구차니
Programming/xml2014. 11. 21. 18:50
파서가 이렇게 많을 줄이야 ㄷㄷ

libxml2 / xerces가 XML 완벽 지원에 가깝고
성능이 중요하다면 rapidXML 이나 pugiXML
대용량 파싱에는 libxml2
이도저도 아닌 상황에서 가볍게 쓰기에는 tinyXML인 듯



[링크 : http://stackoverflow.com/questions/9387610/what-xml-parser-should-i-use-in-c ]

[링크 : http://xmlsoft.org/] libxml2
[링크 : http://xerces.apache.org/]
[링크 : http://rapidxml.sourceforge.net/]
[링크 : http://www.grinninglizard.com/tinyxml/]
[링크 : http://pugixml.org/

'Programming > xml' 카테고리의 다른 글

xmlstarlet  (0) 2016.05.26
DOM vs SAX  (0) 2014.11.21
DTD / XSD  (0) 2014.11.11
xml benchmark  (0) 2014.11.10
xml dtd xsd  (0) 2014.11.10
Posted by 구차니
Linux2014. 11. 21. 14:28
/usr/share/zoneinfo 에 저장되는데
iana에서는 time zone data를 받아서 갱신 할 수 있다.

[링크 : http://www.iana.org/time-zones]
[링크 : http://en.wikipedia.org/wiki/Tz_database]
[링크 : http://unix.stackexchange.com/questions/25139/russian-timezone-is-not-up-to-date

'Linux' 카테고리의 다른 글

mbr , fdisk, partprobe?  (0) 2014.12.02
HPET - High Precision Event Timer / linux  (0) 2014.11.27
dd 출력파일 자르지 않기  (0) 2014.11.20
linux kernel panic 자동복구  (0) 2014.11.13
avahi  (0) 2014.11.10
Posted by 구차니
Programming/qt2014. 11. 21. 10:17
음.. 일단 분석한 내용으로는..
signal은 껍데기 이고 Q_OBJECT를 본 moc가 알아서 생성해서
slot과 연결을 해주는 듯하다

아래 코드를 보면 signals: 에는 프로토타입만 있고 실제로 구현은 보이지 않으며
class Window : public QWidget
{
    Q_OBJECT
public:
    explicit Window(QWidget *parent = 0);
signals:
    void counterReached();
private slots:
    void slotButtonClicked(bool checked);
private:
    int m_counter;
    QPushButton *m_button;
}; 

connect를 보면 signal과 slot은 거의 동일한 함수 형태를 지니고
인자를 넘겨받게 되는 구조로 되어있다.
Window::Window(QWidget *parent) : QWidget(parent)
{
    // Set size of the window
    setFixedSize(100, 50);
 
    // Create and position the button
    m_button = new QPushButton("Hello World", this);
    m_button->setGeometry(10, 10, 80, 30);
    m_button->setCheckable(true);
 
    // Set the counter to 0
    m_counter = 0;
 
    connect(m_button, SIGNAL(clicked(bool)), this, SLOT(slotButtonClicked(bool)));
    connect(this, SIGNAL(counterReached()), QApplication::instance(), SLOT(quit()));
}
 
void Window::slotButtonClicked(bool checked)
{
    if (checked) {
        m_button->setText("Checked");
    } else {
        m_button->setText("Hello World");
    }
 
    m_counter ++;
    if (m_counter == 10) {
        emit counterReached();
    }
} 

아무튼.. 원칙(?)적으로는 각종 핸들러를 만들어주고 생성하고 연결해야 하나
그렇게 되면 코드가 막 꼬이는 것 처럼 보일수가 있기에
이를 간결하게 하기 위해서 moc를 통해 생성하는 구조로 추측된다.

[링크 : http://qt-project.org/doc/qt-4.8/tools-customtypesending.html]
[링크 : http://qt-project.org/wiki/Qt_for_beginners_Signals_and_slots]
[링크 : http://qt-project.org/wiki/Qt_for_beginners_Signals_and_slots_2]
[링크 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/QT_Whitepaper]

'Programming > qt' 카테고리의 다른 글

Qt for Embedded Linux 와 VNC  (0) 2014.12.11
qt dialog / webkit 연동  (0) 2014.12.10
qt 프로젝트 파일 연관  (0) 2014.11.20
QT font 관련  (0) 2014.11.06
QT modules  (0) 2014.11.05
Posted by 구차니
Linux API/network2014. 11. 21. 09:21
윈도우에서는 서버관련 유틸로 msdn에 제공하는 것 같고..
리눅스는 우분투 에서 확인해보니.. 해당 프로그램이 존재하지 않는다 -_-
(버전이 낮아서 그런걸지도..)

omping 은 레드햇용인가...?
아무튼 커널설정에서 보는것 외에는
설정하고 나서 핑 날려 보는 게 전부인가.. -_ㅠ

[링크 : http://www.cisco.com/en/US/docs/ios/ipmulti/configuration/guide/imc_verify_op.html]
[링크 : http://technet.microsoft.com/en-us/library/cc787891(v=ws.10).aspx]
[링크 : http://www-01.ibm.com/.../SSPHQG_7.1.0/com.ibm.powerha.trgd/ha_trgd_test_multicast.htm
[링크 : http://serverfault.com/questions/137976/how-do-i-know-if-ip-multicasting-is-enabled-on-my-network]
[링크 : http://linux.die.net/man/8/omping ]

'Linux API > network' 카테고리의 다른 글

linux udp cpp example  (0) 2019.05.16
linux socket 관련  (0) 2015.01.22
net tools 소스코드  (0) 2011.11.07
INADDR_ANY/INADDR_BROADCAST/INADDR_NONE 매크로  (0) 2011.09.29
hton(), ntoh()  (0) 2011.09.26
Posted by 구차니
Programming/qt2014. 11. 20. 13:44
.pro 파일은 프로젝트 파일

qmake을 통해
Makefile을 생성
그 이후 make로 컴파일 

즉, 프로젝트를 수정할일이 있다면 .pro 파일을 수정후
qmake를 통해서 Makefile을 다시 생성해 내도록 해야 한다.

*.pro -> qmake -> Makefile -> make 

[링크 : http://qt-project.org/doc/qt-4.8/qmake-project-files.html]
[링크 : http://qt-project.org/doc/qt-4.8/qmake-manual.html]
[링크 : http://qt-project.org/doc/qt-4.8/qmake-tutorial.html]

'Programming > qt' 카테고리의 다른 글

qt dialog / webkit 연동  (0) 2014.12.10
qt signal & slot - connect / disconnect / emit  (0) 2014.11.21
QT font 관련  (0) 2014.11.06
QT modules  (0) 2014.11.05
QT Quick UI  (2) 2014.11.05
Posted by 구차니
Linux2014. 11. 20. 10:19
dd 에서 of= 로 지정한 파일에는 기본으로
of의 크기 만큼까지로 해서 잘리기 때문에
자르지 않기 위해서는

conv=notrunc 를 주어야 한다.

$ man dd
       of=file
              표준 출력 대신에 지정한 file을 출력 대상으로 한다.  conv=notrunc 옵션을 사용하지 않는 한은,
              seek= 바이트 크기에 따라 ( seek= 크기가 0아닌  한) 지정한 크기에 따라 출력 파일을 자른다. 

2014/08/29 - [Linux] - dd - disk duplicate
[링크 : http://linux.die.net/man/1/dd]

'Linux' 카테고리의 다른 글

HPET - High Precision Event Timer / linux  (0) 2014.11.27
timezone  (0) 2014.11.21
linux kernel panic 자동복구  (0) 2014.11.13
avahi  (0) 2014.11.10
unknown filesystem type linux_raid_member / RAID 하드 마운트하기  (0) 2014.09.22
Posted by 구차니
Linux API2014. 11. 19. 10:48
리눅스에서 옵션으로 -h 나 --help 같이 두가지 옵션으로 주는 것을 처리해주는 api 인데
직접 작성해 본게 아니라 일단.. 이정도만 정리...

struct option declared in <getopt.h> as

struct option {
    const char *name;
    int         has_arg;
    int        *flag;
    int         val;

extern char *optarg;
extern int optind, opterr, optopt;
 
int getopt_long(int argc, char * const argv[],
           const char *optstring,
           const struct option *longopts, int *longindex);

optstring is a string containing the legitimate option characters. If such a character is followed by a colon, the option requires an argument, so getopt() places a pointer to the following text in the same argv-element, or the text of the following argv-element, in optarg. Two colons mean an option takes an optional arg; if there is text in the current argv-element (i.e., in the same word as the option name itself, for example, "-oarg"), then it is returned in optarg, otherwise optarg is set to zero. This is a GNU extension. If optstring contains W followed by a semicolon, then -W foo is treated as the long option --foo. (The -W option is reserved by POSIX.2 for implementation extensions.) This behavior is a GNU extension, not available with libraries before glibc 2. 
 
[링크 : http://linux.die.net/man/3/getopt_long


-D 는 옵션을 필요로 하는 녀석이라 :가 붙게 되어 D:가 기재되고
optarg에 해당 문자의 포인터가 들어가게 되어 strdup나 atoi 등을 이용해서 인자를 사용하게 된다.
int main(int argc, char *argv[])
{
        struct option long_option[] =
        {
                {"help", 0, NULL, 'h'},
                {"device", 1, NULL, 'D'},
                {"rate", 1, NULL, 'r'},
                {"channels", 1, NULL, 'c'},
                {"frequency", 1, NULL, 'f'},
                {"buffer", 1, NULL, 'b'},
                {"period", 1, NULL, 'p'},
                {"method", 1, NULL, 'm'},
                {"format", 1, NULL, 'o'},
                {"verbose", 1, NULL, 'v'},
                {"noresample", 1, NULL, 'n'},
                {"pevent", 1, NULL, 'e'},
                {NULL, 0, NULL, 0},
        };
 
       while (1) {
                int c;
                if ((c = getopt_long(argc, argv, "hD:r:c:f:b:p:m:o:vne", long_option, NULL)) < 0)
                        break;
                switch (c) {
                case 'h':
                        morehelp++;
                        break;
                case 'D':
                        device = strdup(optarg);
                        break;
                case 'r':
                        rate = atoi(optarg);
                        rate = rate < 4000 ? 4000 : rate;
                        rate = rate > 196000 ? 196000 : rate;
                        break;
                }

[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2pcm_8c-example.html

[링크 : http://forum.falinux.com/zbxe/?mid=C_LIB&page=3&document_srl=408382] getopt()
[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=519764&mid=C_LIB] getopt_long()
[링크 : http://linux.die.net/man/3/getopt]
[링크 : http://linux.die.net/man/3/getopt_long]

'Linux API' 카테고리의 다른 글

lirc - linux IR Remote control  (0) 2015.03.31
vaapi vdpau uvd  (6) 2015.03.26
linux 최대 thread 갯수  (0) 2015.01.22
공유메모리  (0) 2014.09.02
timeval, gettimeofday()  (0) 2013.08.20
Posted by 구차니
Linux API/alsa2014. 11. 18. 10:35
alsa의 latency.c를 실행하다 보니
깔끔하게 상태를 출력해주는 녀석이 있어서 찾아보게 됨.

Hardware PCM card 0 'mxs-evk' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 16000
  exact rate   : 16000 (16000/1)
  msbits       : 16
  buffer_size  : 128
  period_size  : 64
  period_time  : 4000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 64
  period_event : 0
  start_threshold  : 2147483647
  stop_threshold   : 128
  silence_threshold: 0
  silence_size : 0
  boundary     : 1073741824 


snd_pcm_dump(phandle, output);
snd_pcm_dump(chandle, output);
fflush(stdout); 


[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html#...1d8d]

----


  state       : RUNNING
  trigger_time: 2130.83093753
  tstamp      : 2160.96375002
  delay       : 48
  avail       : 16
  avail_max   : 44 

snd_output_t *output = NULL;
err = snd_output_stdio_attach(&output, stdout, 0);
if (err < 0) {
        printf("Output failed: %s\n", snd_strerror(err));
        return 0;
}
 
void showstat(snd_pcm_t *handle, size_t frames)
{
        int err;
        snd_pcm_status_t *status;
        snd_pcm_status_alloca(&status);
        if ((err = snd_pcm_status(handle, status)) < 0) {
                printf("Stream status error: %s\n", snd_strerror(err));
                exit(0);
        }
        printf("*** frames = %li ***\n", (long)frames);
        snd_pcm_status_dump(status, output);
}

[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2latency_8c-example.html]  


[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html#...a51]
[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html]

'Linux API > alsa' 카테고리의 다른 글

alsa timestamp  (0) 2014.11.26
alsa async  (0) 2014.11.26
ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
Posted by 구차니
MPLAYER 쪽에서는 ESD, PULSE, JACK을 켜주면 가능할 것 같다

Audio output:
  --disable-alsa         disable ALSA audio output [autodetect]
  --disable-ossaudio     disable OSS audio output [autodetect]
  --disable-arts         disable aRts audio output [autodetect]
  --disable-esd          disable esd audio output [autodetect]
  --disable-pulse        disable Pulseaudio audio output [autodetect]
  --disable-jack         disable JACK audio output [autodetect]
  --disable-openal       disable OpenAL audio output [autodetect]
  --disable-nas          disable NAS audio output [autodetect]
  --disable-sgiaudio     disable SGI audio output [autodetect]
  --disable-sunaudio     disable Sun audio output [autodetect]
  --disable-kai          disable KAI audio output [autodetect]
  --disable-dart         disable DART audio output [autodetect]
  --disable-win32waveout disable Windows waveout audio output [autodetect]
  --disable-coreaudio    disable CoreAudio audio output [autodetect]
  --disable-select       disable using select() on the audio device [enable] 


[링크 : http://blog.wonderwall.me/?p=272]
[링크 : http://mpd.wikia.com/wiki/PulseAudio]

'프로그램 사용 > ffmpeg & ffserver' 카테고리의 다른 글

mplayer status line  (0) 2015.01.26
FAAD / FAAC  (0) 2015.01.23
ffserver.conf 설정법  (0) 2014.11.06
Mplayer 캐시 설정  (0) 2014.11.06
Mplayer 1.1 / ffmpeg 0.10.2 git  (0) 2014.10.22
Posted by 구차니