스트리밍 동영상 또는 음악의 주소를 알려주는 "URL Helper"입니다

주소가 숨겨진채 인터넷에서 실시간 플레이되는 스트리밍 파일의 주소를 알아내주어 다운로드 받을 수 있도록 해주는 프로그램입니다. 네트워크 속도가 느려 실시간으로 보고듣지 못하는 분들에겐 유용한 프로그램일것입니다.

http://www.streamingstar.com
http://simfile.chol.com/view.php?fnum=124289
원문 :   D 프로그래밍 언어 소개
D 프로그래밍 언어 소개


음.. 요즘 D언어에 관심을 가지고 있습니다. 이름에서 알수 있듯이... B다음에 C다음에 C++다음에 만들어진 D언어입니다. 1.0이 나온게 몇년전이고 지금은 상당히 완성도를 가지고 있다고 하더군요.

그리고 예상과는 달리 사용자층도 꽤 만고 해서, D언어를 함 사용해 보기로 마음 먹고 위키를 만들었습니다.
위키의 주소는 http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/D 이고 앞으로 계속 수정되어 나갈 겁니다.




C 언어가 B 언어로부터 나왔다는 얘기는 아마 언뜻 들어서 다들 알고 있을 것 같다. 언어의 역사가 궁금하다면 언어의 역사 문서를 한번 보기 바란다.

C 도 나왔고, 객체지향을 적용한 C++도 나왔으니 이제 D 언어도 나오지 않을까 ? 라는 생각이 들어봄직도 할 거 같은데, 정말 D 언어가 나왔다. 물론 나온지는 꽤 되었고, 예전 부터 써봐야지 써봐야지 하면서 차일피일 미루어왔는데, 이번참에 직접 사용해 보기로 했다. 이 위키는 D언어를 잘 배워서 한번 써먹어 보자라는 취지로 만들었다.

관련기사
지 금, 세계는 대화 언어보다 프로그램 언어를 더 많이 가지고 있으나 프로그램 언어들은 계속 만들어지고 있다. 금주에 Digital Mars는 C/C++의 문제점과 약점을 해결한 D 언어를 발표했다. D는 C++ 컴파일러, Zortech C++의 자손이다. D는 무료이며 윈도우와 리눅스를 위한 표준 라이브러리이며 오픈 소스이다.

C/C++의 개선으로 D는 C 코드와 호환되며 콜 인터페이스 없이 어떠한 C API와도 인터페이스 가능하다. 그러나 D는 C 코드와 완전하게 후향적 호환은 안되며 자바와 Microsoft C#의 많은 기능을 추가로 한다. D는 2001년 이후 개발되었으며 오픈 소스 공동체의 입력물을 많이 사용하였으며 http://dmoz.org/Computers/Programming/Languages/D/에 자료가 많이 있다.

브라이트는 “D는 C++ 프로그래머의 경험에 의해 개발되었으며 많은 새로운 언어처럼 어느 특정한 플랫폼을 목적으로 설계되지 않았다. D의 개념은 빠르게 배우고 코딩하고 빠르게 디버깅하며 유지 보수하는 것”이라고 말했다.

Forrester Research 분석가인 제프 함몬드는 “D가 기반을 얻기까지에는 약간의 시간이 걸릴 것이다. D 언어가 성공하려면 D 언어 기술이 좋은 것 이외에도 그에 맞는 비즈니스 모델이 있어야 될 것”이라고 말했다. 마치 리눅스가 성공한 이유가 그 당시 다른 OS 가격이 너무 고가이어서 고객들이 선택했기 때문인 것처럼 필요한 비즈니스 모델이 중요하다.

출처 : http://www.internetnews.com

D 언어 소개

http://www.digitalmars.com/

C와 C++은 시스템프로그래밍에 있어서 강력함을 발휘 한다. 특유의 단순함과 중급언어라고 분류할 만큼 시스템에 가깝다는게 그 이유인데, 이 단순함은 요즘 같은 시대에 단점이기도 하다.

암 튼 이 두언어는 최신언어의 유행에 한참이나 뒤 떨어져 있다. 절차지향적이고 그다지 깔끔하지도 않으며, C++은 객체지향 적이긴 하지만 업계표준이며 모태라고 할 수 있는 C언어와의 호환성유지등의 문제로 현대언어들의 유행을 쫓아가지 못하고 있다.

물 론 현대언어의 유행이란 것이 모든 면에 있어서 좋은 쪽으로 흘러간다고 할 수는 없다. 그렇다면 C와 C++이라는 언어자체가 필요 없어질 것 아닌가. C와 C++이 유행을 따르지 않음으로써 구식언어라는 멍에를 지기는 했지만 여전히 시스템/네트워크 프로그래밍에 있어서, 속도와 성능,신뢰도 측면에서 높은 점수를 받고 있으며 실제로 널리 사용되고 있다.
Position
Dec 2007
Position
Dec 2006
Delta in PositionProgramming LanguageRatings
Dec 2007
Delta
Dec 2006
Status
1 1 Java 20.049% +0.14%   A
2 2 C 13.173% -3.44%   A
3 4 (Visual) Basic 10.219% +1.31%   A
4 5 PHP 8.393% -0.14%   A
5 3 C++ 7.871% -2.54%   A
6 7 Python 4.697% +0.93%   A
7 6 Perl 4.383% -2.01%   A
8 8 C# 3.994% +0.82%   A
9 11 Ruby 3.089% +0.76%   A
10 10 JavaScript 2.733% +0.17%   A
11 9 Delphi 2.673% +0.10%   A
12 14 D 1.633% +0.66%   A
13 13 PL/SQL 1.394% +0.05%   A
14 12 SAS 1.393% -0.84%   A
15 18 COBOL 0.894% +0.29%   A-
16 15 ABAP 0.875% -0.03%   A-
17 17 Lisp/Scheme 0.841% +0.20%   A-
18 20 Transact-SQL 0.817% +0.35%   A--
19 19 Pascal 0.791% +0.23%   A--
20 46 Lua 0.771% +0.67%   A-
출처 : http://www.tiobe.com/tpci.htm

D언어는 즉 시스템 프로그래밍을 위한 C/C++의 강력함과 최근의 언어들이 가지고 있는 Object orinted, template metaprogramming style 등의 multiparadigm을 지원하는 언어다.

D언어는 statically type를 지원하며 native 코드로 컴파일 되어서 실행된다.

D 언어 설치

Windows, Linux 모두에 대한 버젼이 있는데, 환경이 Linux인 관계로 Linux를 기준으로 설명하도록 하겠다.

  • http://www.digitalmars.com/d/download.html 에서 d 언어 컴파일러를 다운로드 받을 수 있다.
  • D언어 전용컴파일인 dmd와 GCC를 위한 GDC두가지 버젼이 있다.
  • gcc의 프론트엔드인 GDC를 받아서 테스트를 하기로 했다.
  • 다운로드 받은 다음에 /usr/local/gdc 에 압축을 풀었다.
  • 다음과 같이 LD_LIBRARY_PATHPATH 환경변수를 수정했다.

    # export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gdc/lib
    # export PATH=$PATH:/usr/local/gdc/bin

이제 wc의 d버젼을 가지고 테스트 해보았다.
import std.stdio;
import std.stream;
import std.date;

int main (char[][] args)
{
int w_total;
int l_total;
ulong c_total;
int[char[]] dictionary;

writefln(" lines words bytes file");
foreach (arg; args[1 .. args.length])
{
int w_cnt, l_cnt;
bool inword;

auto c_cnt = std.file.getSize(arg);
if (c_cnt < 10_000_000)
{
size_t wstart;
auto input = cast(char[])std.file.read(arg);

foreach (j, c; input)
{
if (c == '\n')
++l_cnt;
if (c >= '0' && c <= '9')
{
}
else if (c >= 'a' && c <= 'z' ||
c >= 'A' && c <= 'Z')
{
if (!inword)
{
wstart = j;
inword = true;
++w_cnt;
}
}
else if (inword)
{ auto word = input[wstart .. j];

dictionary[word]++;
inword = false;
}
}
if (inword)
{ auto w = input[wstart .. input.length];
dictionary[w]++;
}
}
else
{
auto f = new BufferedFile(arg);
char[] buf;

while (!f.eof())
{ char c;

f.read(c);
if (c == '\n')
++l_cnt;
if (c >= '0' && c <= '9')
{
if (inword)
buf ~= c;
}
else if (c >= 'a' && c <= 'z' ||
c >= 'A' && c <= 'Z')
{
if (!inword)
{
buf.length = 1;
buf[0] = c;
inword = 1;
++w_cnt;
}
else
buf ~= c;
}
else if (inword)
{
if (++dictionary[buf] == 1)
buf = null;
inword = 0;
}
}
if (inword)
{
dictionary[buf]++;
}
}
writefln("%8s%8s%8s %s\n", l_cnt, w_cnt, c_cnt, arg);
l_total += l_cnt;
w_total += w_cnt;
c_total += c_cnt;
}

if (args.length > 2)
{
writefln("--------------------------------------\n%8s%8s%8s total",
l_total, w_total, c_total);
}

writefln("--------------------------------------");

foreach (word1; dictionary.keys.sort)
{
writefln("%3s %s", dictionary[word1], word1);
}
writefln(toDateString(getUTCtime()));
return 0;
}

컴파일과 실행은 매우 간단했다.
# gdc -o wc wc.d
# ./wc wc.d
lines words bytes file
114 234 2922 wc.d

--------------------------------------
2 A
1 BufferedFile
2 Z
....
Mon Jan 29 2007

'1.소프트웨어 이야기 > 09.ETC' 카테고리의 다른 글

URL Helper  (0) 2007.12.06
Manifest 적용하기..  (0) 2007.12.06
두 점 사이의 각도 구하기  (0) 2007.12.06
아래 내용을 파일로 만들어 실행 파일에 있는곳에 집어 넣으면 간단히 해결된다...

VC에서 몇개 설정해야 되던걸 이렇게 간단히 해결할 수 있다니... ㅠㅠ...

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-     <assemblyxmlns="urn:schemas-microsoft-com:asm.v1"manifestVersion="1.0">
      <assemblyIdentity processorArchitecture="*"version="5.1.0.0"type="win32"name="Microsoft.Windows.Shell.shell32"/>
      <description>Windows Shell</description>
-     <dependency>
-     <dependentAssembly>
      <assemblyIdentity type="win32"name="Microsoft.Windows.Common-Controls"version="6.0.0.0"publicKeyToken="6595b64144ccf1df"language="*"processorArchitecture="*"/>
  </dependentAssembly>
   </dependency>
</assembly>

이 내용을 복사해서 "실행파일.exe.manifest"로 만들어 실행파일이 있는곳에 집어 넣으면 끝....
-------------------------------------------------------------------------------------
이런 소스가 귀찮다면... 볼랜드의 컴포넌트중.. XP Manifest 클래스를 떨어뜨려주기만해도.. 됨...
활성화만 시켜주면 바로 적용됨...

'1.소프트웨어 이야기 > 09.ETC' 카테고리의 다른 글

D 언어 소개  (0) 2007.12.06
두 점 사이의 각도 구하기  (0) 2007.12.06
문자열 처리 함수  (0) 2007.12.06


60분법 : 일반적으로 각의 크기를 나타내는 방법

● 호도법 : 원의 크기와는 관계없이 호의 길이와 반지름의 길이의 비가 일정하다는 원리를 이용하여, 이 비로 각의 크기를 나타내는 방법

 


반지름의 길이가 r인 원에서 크기가 θ인 중심각에 대한 호의 길이를 l이라고 하면,
l과 r의 비 l/r은 원의 크기에 관계없이 항상 일정하므로, ∠AOB의 크기를

 

l/r 라디안(radian)

으로 나타낼 수 있다.

즉, 반지름의 길이와 호 길이가 같을 경우  중심각의 크기는 1 라디안이다

 

180°= πr /r 라디안 = π 라디안

 

atan2() 함수는 라디안 값을 반환한다.



 
 

 

#include

#include


void main()

{

        double dX = 10;

        double dY = -10;

 

        printf("%lf\n", atan2( dY, dX ) * 180 / 3.14159265);

}

'1.소프트웨어 이야기 > 09.ETC' 카테고리의 다른 글

Manifest 적용하기..  (0) 2007.12.06
문자열 처리 함수  (0) 2007.12.06
윈도우 간단 메시지 보내기  (0) 2007.12.06
** 문자열 처리 함수 **

#include <string.h>


1) 문자열의 길이 측정(strlen)
    strlen(문자열)

2) 문자열 결합(strcat)
    char *ptr;
    ptr = strcat(문자열, 문자열2)

3) 문자열 비교(strcmp)

    int i;
    i = strcmp(문자열, 문자열2)
    i == 0 <--- 같다.
    i != 1 같지 않다.

4) 문자열 복사(strcpy)

    char *ptr;
    strcpy(문자열, 문자열2)|
    문자열2를 문자열로 복사

5) 문자열 변환(atoi, atol, atof)

    atoi -> 정수
    atol -> long
    atof -> 부동 소수점.    

    long b; float c;
    int a;
    a = atoi("1234");
    b = atol("-544334");
    c = atof("43.5456);

6) 문자열 교환 함수 (str_swap)

    void str_cpy(char *ptr1, char *ptr2)
    {
       while(*ptr2)
        *ptr1++ = *ptr2++;
        *ptr1 = NULL;
    }

    void str_swap(char *a, char *b)
    {
       char temp[255];
       str_cpy(temp, a);
       str_cpy(a, b);
       str_cpy(b, temp);
    }

7) 문자열 내에서 특정 문자의 개수를 카운트 하는 함수(char_cnt)

    int char_cnt(char *ptr, char ch)
    {
        int i = 0;
        while(*ptr)
         if(*ptr++ == ch)
            i++;
        return(i);
    } 

8) 문자열 내의 특정 문자를 다른 문자로 바꾸는 함수(str_chg)

    int str_chg(char *ptr, char ch1, char ch2)
    {
       while(*ptr)
       {
        if(*ptr == ch1)
           *ptr = ch2;
           ptr++;
       }
    }

9) 문자열 내의 특정 문자를 탐색(str_fine)

    char *str_find(char *ptr, char ch)
    {
       while(*ptr)
       {
        if(*ptr == ch)
           return(ptr);
        ptr++;
       }
       return((char *)(-1));
    }

10) 문자열 내의 소문자를 대문자로 바꾸는 함수(str_upp)

    void str_upp(char *ptr)
    {
       while(*ptr)
       {
        if(islower(*ptr))
           *ptr = toupper(*ptr);
        ptr++;
        }
    }

11) 문자열 내의 대문자를 소문자로 바꾸는 함수(str_low)

    void str_low(char *ptr)
    {
       while(*ptr)
       {
        if(isupper(*ptr))
           *ptr = tolower(*ptr);
        ptr++;
       }
    }

12) 대문자와 소문자 상호 교환 함수(str_case)

    void str_case(char *ptr)
    {
       while(*ptr)
       {
        if(isupper(*ptr))
           *ptr = tolower(*ptr);
        else if(islower(*ptr)
           *ptr = toupper(*ptr);
        ptr++;
       }
    }

13) 각 문장의 첫 문자만 대문자로 교환하는 함수(str_fst)

    void str_fst(char *ptr)
    {
        if(islower(*ptr))
        *ptr = toupper(*ptr);
        while(*ptr)
        {
           if(*ptr == '.')
          {
           ptr++;
           while(*ptr == ' ')
            ptr++;
           if(islower(*ptr))
            *ptr = toupper(*ptr);
          }
        }
        ptr++;
    }

14) 문자열 내의 지정한 위치에 다른 문자열을 삽입하는 함수(str_ins)

    char *str_ins(char ptr1[], char ptr2[],int t)
    {
       char temp[255];
       int i, j, k;
       if(t>=str_len(ptr1) return (-1);  
       for(k=0; i=0; i<t; i++; k++)
        temp[k] = ptr1[i];  

       for(j=0; ptr2[j] !=NULL; j++, k++)  
        temp[k] = ptr2[j];

       while(ptrl1[i])
        temp[k++] = ptr1[i++];

       temp[k] = NULL;
    }

15) 문자열 앞에 지정한 개수 만큼의 공백을 추가하는 함수(str_blk)

    void str_blk(char ptr[], int t)
    {
       static char temp[255];
       int i;
       for(i = 0; i<t; i++)
        temp[i] = BLANK;
       temp[i] = NULL;
       str_cat(temp ptr);
       str_cpy(ptr, temp);
    }

16) 문자열 내의 모든 공백을 삭제하는 함수(rmv_blk)

    void rmv_blk(char ptrp[])
    {
       char temp[255];
       int i, k;

       for(i=0, k=0; ptr[i] != NULL; i++)
        if(ptr[i] != BLANK)
           temp[k++] = ptr[i];
       temp[k] = NULL;
       str_cpy(ptr, temp);
    }

17) 문자열 내에서 원하는 개수 만큼 문자를 삭제하는 함수(str_rmv)

    void str_rmv(char *ptr, int loc, int count)
    {
       int len, i, j;
       len = str_len(ptr);
       if(loc >= len)
        return (-1);

       if(loc + count <= len)
       {
        j = loc + count;
        for(i=loc; ptr[j] != 0; i++)
        {
           ptr[i] = ptr[j];
           j++;
        }
            ptr[i] = NULL;
       }
       else
        ptr[loc] = NULL;
    }

18) 특정한 문자열이 기억된 위치를 계산하는 함수(str_loc)

    int str_loc(char ptr1[], char ptr2[])
    {
       int i, j, k;
       for(i=0; ptr1[i] != NULL; i++)
        for(j=i, k=0; ptr2[k] == ptr1[j]; k++, j++)
           return (i);
       return (-1);
    }


19) 특정한 문자열이 나온 개수를 카운트 하는 함수(str_cnt)

    int str_cnt(char ptr1[], char ptr2[])
    {
       int i, j, k;
       int count = 0;
       for(i=0; ptr1[i] != NULL; i++)
        for(j=i, k=0; ptr2[k] == ptr1[j]; k++, j++)
           if(ptr2[k+1] == NULL)
           {
            count++;
            break;
           }
        return ((count == 0) ? -1 : count);
    }

net send 192.168.0.1 하이

인터넷에서 찾아서 참고 하고 수정한 함수들...

/********************************************************************************************
한 비트값을 얻고자할때  index는 8bit 중 그 위치
GetBits (변수 ,  순서);  
7 6 5 | 4 3 2 1 0
GetBit(word,5); 5번째 값을 가져옴.. ^^
********************************************************************************************/
int GetBit (unsigned char data, int index) 
{
    unsigned char mask = 0x01;
    mask = mask << index;
    int i = data & mask;
    i = i >> index;
    return i;
}

/********************************************************************************************
2bit이상의 값을 추출할때 index(7-0)는 마지막 위치 ,  size는 가져오는 비트수
GetBits (변수 ,  5 , 3);  7 - 5까지 값을 가져옴.. ^^
7 6 5 | 4 3 2 1 0
********************************************************************************************/
int GetBits (unsigned char data, int index, int size) 
{
   unsigned char mask = 0xFF;
   mask = mask << (8-size);
   mask = mask >> (8-size);
   mask = mask << index;
   int i = data & mask;
   i = i >> index;
   return i;
}

// 형변환 모음
// CString형을 double형으로 변환
double CString2double(CString str)
{
   char *Temp = (LPSTR)(LPCSTR)str;
   return atof(Temp);
}

// double형을 CString형으로 변환
CString double2CString(double num)
{
   CString Temp;
  Temp.Format("%f", num);
  return Temp;
}

// CString형을 char* 형으로 바꾸는 함수
char *CString2char(CString str)
{
   char *charTemp = (LPSTR)(LPCSTR)str;
   return charTemp;
}


// 그외 형변환 참조 기존 자료들..
// int -> char *
Visual C++ 에는 다음과 같은 함수가 있습니다.
int , __int64 , unsigned __int64 등의 데이터형을 char* 형으로 바꾸어주는 함수들입니다.
인자에 대해 설명하자면 int value 는 입력값, char *string 은 출력값, int radix 는 출력될 진법을 표시합니다.
예를 들어 radix를 16으로 설정하면 16진수로 출력한다는 말이죠. radix 값은 2~36 사이의 값만 가능합니다.

char *_itoa( int value, char *string, int radix );
char *_i64toa( __int64 value, char *string, int radix );
char * _ui64toa( unsigned __int64 value, char *string, int radix );
wchar_t * _itow( int value, wchar_t *string, int radix );
wchar_t * _i64tow( __int64 value, wchar_t *string, int radix );
wchar_t * _ui64tow( unsigned __int64 value, wchar_t *string, int radix );

// char* 형을 double 형으로 바꾸는 함수
double atof( const char *string );

// char* 형을 int 형으로 바꾸는 함수
int atoi( const char *string );

// char* 형을 __int64 형으로 바꾸는 함수
__int64 _atoi64( const char *string );

// char* 형을 long 형으로 바꾸는 함수
long atol( const char *string );

'1.소프트웨어 이야기 > 09.ETC' 카테고리의 다른 글

두 점 사이의 각도 구하기  (0) 2007.12.06
문자열 처리 함수  (0) 2007.12.06
윈도우 간단 메시지 보내기  (0) 2007.12.06

+ Recent posts