윈도우 10에서 RNDIS/Ethernet Gadget 장치로 인식안 될 경우가 있다. 이 경우 알림창에 드라이버 설치 중이 나온 후 완료가 되지 않으며 일반 USB 장치로 인식된다. 해결 방법은 아래 링크에서 드라이버를 받은 후, 일반 USB 장치를 선택하여 수동으로 드라이버를 업데이트해야한다.

출처: https://devnauts.tistory.com/133?category=536861 [devnauts]

윈도우 10에서 RNDIS/Ethernet Gadget 장치로 인식안 될 경우가 있다. 이 경우 알림창에 드라이버 설치 중이 나온 후 완료가 되지 않으며 일반 USB 장치로 인식된다. 해결 방법은 아래 링크에서 드라이버를 받은 후, 일반 USB 장치를 선택하여 수동으로 드라이버를 업데이트해야한다.



참고 사이트 (TMI)


,
  1. MySQL 콘솔을 실행한다.
  2. 다음 명령을 입력하여 쿼리 프로파일링을 시작한다.
mysql>SET profiling = 1;
  1. 테스트하기 원하는 데이터베이스 테이블에 대해 쿼리를 실행한다.
mysql>SELECT * FROM Example
  1. 다음 명령을 입력하여 최근에 실행한 쿼리에 대한 프로파일 정보를 확인할 수 있다.
mysql>SHOW profiles;



참고 사이트

,

>> [HTML] 테이블 태그에 Single Line 스타일 추가

  • table-st : 샘플1 스타일로 테이블 스타일 추가
  • table-st-ts : 샘플2(티스토리) 스타일로 테이블 스타일 추가
  • table-st-mw : 샘플3(미디어위키) 스타일로 테이블 스타일 추가


함수 정의


(defun table-st ()
  (interactive)
  (setf table-tag "<table>")
  (setf td-tag "<td>")
  (setf th-tag "<th>")
  (setf table-st-tag "<table style=\"border-collapse:collapse;\" border=\"1\">")
  (setf td-st-tag "<td style=\"padding:5px 5px\">")
  (setf th-st-tag "<th style=\"padding:5px 5px\">")

  (my-rewind)
  (my-replace table-tag table-st-tag nil)
  (my-rewind)
  (my-replace th-tag th-st-tag nil)
  (my-rewind)
  (my-replace td-tag td-st-tag nil)
  )

(defun table-st-ts ()
  (interactive)
  (setf table-tag "<table>")
  (setf td-tag "<td>")
  (setf th-tag "<th>")
  (setf table-st-tag "<table style=\"border-collapse:collapse;border:1px solid #ccc;\">")
  (setf td-st-tag "<td style=\"border:1px solid #ccc;padding:5px 5px\">")
  (setf th-st-tag "<th style=\"border:1px solid #ccc;padding:5px 5px\">")

  (my-rewind)
  (my-replace table-tag table-st-tag nil)
  (my-rewind)
  (my-replace th-tag th-st-tag nil)
  (my-rewind)
  (my-replace td-tag td-st-tag nil)
  )

(defun table-st-mw ()
  (interactive)
  (setf table-tag "<table>")
  (setf td-tag "<td>")
  (setf th-tag "<th>")
  (setf table-st-tag "<table style=\"background-color: #f8f9fa;color: #222;border-collapse:collapse;border: 1px solid #a2a9b1;\">")
  (setf td-st-tag "<td style=\"border: 1px solid #a2a9b1;padding:5px 5px\">")
  (setf th-st-tag "<th style=\"border: 1px solid #a2a9b1;padding:5px 5px\">")

  (my-rewind)
  (my-replace table-tag table-st-tag nil)
  (my-rewind)
  (my-replace th-tag th-st-tag nil)
  (my-rewind)
  (my-replace td-tag td-st-tag nil)
  )



참고사항


다음의 함수 정의를 사용합니다.


,
  • my-rewind : 버퍼 내에 맨 앞으로 이동하는 함수
  • my-replace : 현재 위치로부터 뒤로 검색하면서 특정 문자열을 다른 문자열로 모두 바꿔주는 함수 (bound: 특정 위치까지 검색. nil이면 버퍼끝까지)
  • my-replace-1t : 현재 위치로부터 뒤로 검색하면서 특정 문자열을 다른 문자열로 1회 바꿔주는 함수. 대체가 일어났을 경우 t를, 아니면 nil을 리턴 (bound: 특정 위치까지 검색. nil이면 버퍼끝까지)


함수 정의

(defun my-rewind ()
  (goto-char (point-min))
  )

(defun my-replace (str-from str-to bound)
  (progn
    (while (search-forward str-from bound t)
      (progn
        (delete-backward-char (length str-from))
        (insert str-to)
		)
	  )
	)
  )

(defun my-replace-1t (str-from str-to bound)
  (progn
    (if (search-forward str-from bound t)
		(progn
		  (delete-backward-char (length str-from))
		  (insert str-to)
		  t
		  )
	  nil
	  )
	)
  )


사용 예

(defun my-replace-example ()
  (interactive)

  (my-rewind)
  (my-replace "abc" "def" nil)  ;버퍼내에 모든 'abc'를 'def'로 바꿈
  )

,

밋밋한 테이블을 보기좋게!


직접 Table 태그를 사용하여 테이블을 구성하거나, Pandoc 툴 등을 사용하여 HTML을 생성하였을 경우, 만들어진 테이블은 스타일이 없기 때문에 너무 밋밋해보입니다. 그렇다고 단순하게 border="1" 이렇게 스타일을 줘버리면 HTML 기본의 보기에 아름답지 않은 경계선이 붙게 됩니다. 다음은 보기 좋은 Single Line 경계선을 추가하는 몇가지 스타일 샘플입니다.


<샘플1>


TABLE 태그 –> style="border-collapse:collapse;" border="1"

TH, TD 태그 –> style="padding:5px 5px"


Item

Amount

Cost

Orange

10

7.00

Bread

4

3.00

Butter

1

5.00

Total

15.00



<샘플2 - 티스토리 스타일>


TABLE 태그 –> style="border-collapse:collapse;border:1px solid #ccc;"

TH, TD 태그 –> style="border:1px solid #ccc;padding:5px 5px"


Item

Amount

Cost

Orange

10

7.00

Bread

4

3.00

Butter

1

5.00

Total

15.00



<샘플3 - 미디어위키 스타일>


TABLE 태그 –> style="background-color: #f8f9fa;color: #222;border-collapse:collapse;border: 1px solid #a2a9b1;"

TH, TD 태그 –> style="border: 1px solid #a2a9b1;padding:5px 5px"


Item

Amount

Cost

Orange

10

7.00

Bread

4

3.00

Butter

1

5.00

Total

15.00



참고 사항


티스토리 구 편집기로 테이블을 추가할 경우 테이블 스타일이 아래와 같이 오류가 있어 폰트 설정이 적용되지 않습니다.

<table class="txc-table" style="border:none;border-collapse:collapse;;font-family:" 맑은="" 고딕",="" sans-serif;font-size:13px"="" width="664" cellspacing="0" cellpadding="0" border="0">

제대로 될려면 아래와 같이 수정이 필요합니다.

<table class="txc-table" style="border:none;border-collapse:collapse;;font-family:맑은 고딕, sans-serif;font-size:13px" width="664" cellspacing="0" cellpadding="0" border="0">



참고 사항 - 2


티스토리 콘텐트 설정 중, ‘단락 앞뒤에 공백’ 옵션을 사용으로 하였을 경우, 테이블내 컨텐츠에도 공백이 적용되어 아래와 같이 행높이가 확장되어 보이게 됩니다. 필요에 따라 해당 옵션을 해제하거나, 테이블에 추가적인 행높이 스타일을(;height:xx) 사용하기 바랍니다.



참고 사항 - 3


,

마크다운 문법은 무척 편리하기는 한데 테이블 관련 요소가 없는 점은 아쉽습니다.

미디어위키 문법에는 테이블 관련 요소가 있어 다음의 Pandoc을 사용하여 HTML로 변환하는 방법을 사용하여 HTML로 변환한 후 갖다붙이는 방식으로 활용할 수 있습니다.



Pandoc을 사용한 변환 커맨드

pandoc -s -f mediawiki -t html <입력파일명> -o <출력파일명>

>> Pandoc을 사용하여 Markdown -> HTML 변환하기



완전 기초 샘플


<변환 전>


다음 두가지 방식 다 사용가능합니다. (row를 나눠서 vs. 한줄에)

{|
! Item
! Amount
! Cost
|-
|Orange
|10
|7.00
|-
|Bread
|4
|3.00
|-
|Butterㅡ
|1
|5.00
|-
|Total
|
|15.00
|}

Or

{|
! Item!! Amount!! Cost
|-
|Orange||10||7.00
|-
|Bread||4||3.00
|-
|Butter||1||5.00
|-
|Total||||15.00
|}


<변환 후>


Item

Amount

Cost

Orange

10

7.00

Bread

4

3.00

Butter

1

5.00

Total

15.00



약간 고오급 샘플


HTML 속성에 해당하는 내용을 추가로 입력할 수 있다. 셀 속성의 경우는 셀 내용물과 |로 구분하여 입력한다.


<변환 전>

{| style="color:green; background-color:#ffffcc;" cellpadding="10"
! Item
! Amount
! Cost
|-
| colspan="3" style="text-align:center;" |Orange
|-
|Bread
|4
|3.00
|-
|Butter
|1
|5.00
|-
|Total||||15.00
|}


<변환 후>


Item Amount Cost
Orange
Bread 4 3.00
Butter 1 5.00
Total 15.00



제약사항


그란데 말입니다. Pandoc을 사용하여 HTML로 변환할 경우, 미디어위키 테이블의 모든 문법을 지원하지는 않아서 위 예제 중 완전 기초 샘플 수준까지만 변환이 가능합니다. (스타일 등 속성 적용 안 됨)



스타일 적용


이렇게 생성된 테이블은 스타일이 없기 때문에 너무 밋밋해보입니다. 다음 글을 참고해 스타일을 추가해보는게 좋습니다.

>> 테이블에 스타일 추가하기



참고 사이트


,
현재의 티스토리 에디터는 직접 markdown 편집도 지원을 하고 있지만, 구 버전의 편집기 사용시에 다음과 같은 markdown 소스를 작성하여 HTML 변환을 한 후 티스토리 소스에 붙여넣을 경우,


## 제목1
본문

## 제목2
- 리스트1
- 리스트2

본문

## 제목2
본문

- 리스트1
- 리스트2


아래와 같이 깔끔하지 않게 나오지 않는 경우가 있는데, (특히, 단락 앞뒤에 공백 옵션을 사용하지 않았을 경우. 적용되는 스킨의 CSS에 따라 차이는 있을 수 있음.)


제목1

본문

제목2

  • 리스트1
  • 리스트2

본문

제목2

본문

  • 리스트1
  • 리스트2


이 변환기를 사용할 경우, 다음과 같이 추가적인 줄바꿈을 넣어줘서,


## 제목1
<p><br></p>
본문
 
<p><br></p>
<p><br></p>
## 제목2
- 리스트1
- 리스트2
 
본문
 
<p><br></p>
<p><br></p>
## 제목2
<p><br></p>
본문
 
- 리스트1
- 리스트2


HTML 변환후에, 아래 결과와 같이 보기좋게(?) 표시될 수 있게합니다.


제목1


본문



제목2

  • 리스트1
  • 리스트2

본문



제목2


본문

  • 리스트1
  • 리스트2


변환기 소스


md_convert.py:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import sys

DOUBLE_BR_BEFORE_HEADER = True

STATUS_START = 0
STATUS_NONE = 1
STATUS_LIST = 2
STATUS_PRE = 3
STATUS_HEADER = 4

LINE_BR = "<p><br></p>\n"

def print_usage():
    print("usage: python md_convert.py [option]")
    print("Options:")
    print("-i input-file : 지정된 입력 파일을 사용하여 변환을 하고 입력 파일을 덮어씁니다.")
    print("-i input-file output-file : 지정된 입력 파일과 출력 파일을 사용하여 변환을 합니다.")

def is_ol_item(str):
    pos = str.find(". ")
    if pos == -1:
        return False
    return str[:pos].isdigit()

def go_convert(config):
    filename_in = config["filename_in"]
    filename_out = config["filename_in"]
    if "filename_out" in config:
        filename_out = config["filename_out"]

    print("\nconverting %s.." % filename_in)

    file_in = open(filename_in, 'r', encoding = "utf-8")

    all_line = []
    for line in file_in:
        all_line.append(line)
    file_in.close()

    all_line_new = []
    insidePre = False
    status = STATUS_START
    status_old = status

    for line in all_line:
        status_old = status

        line_strip = line.lstrip()
        if len(line_strip) > 0:
            if insidePre:
                if line_strip[:5] == "</pre":
                    insidePre = False
            else:
                if line_strip[:4] == "<pre":
                    insidePre = True
                    status = STATUS_PRE
                elif line_strip[:1] == "-" or is_ol_item(line_strip):
                    status = STATUS_LIST
                elif line_strip[:1] == "#":
                    status = STATUS_HEADER
                else:
                    status = STATUS_NONE
                    
            if DOUBLE_BR_BEFORE_HEADER and status == STATUS_HEADER and status_old != STATUS_START:
                all_line_new.append(LINE_BR)
                
            if status_old == STATUS_NONE:
                if status == STATUS_HEADER:
                    all_line_new.append(LINE_BR)
            elif status_old == STATUS_HEADER:
                if status == STATUS_NONE:
                    all_line_new.append(LINE_BR)
                if status == STATUS_HEADER:
                    all_line_new.append(LINE_BR)
        all_line_new.append(line)

    file_out = open(filename_out, 'w', encoding = "utf-8")
    for line in all_line_new:
        file_out.write(line)
    file_out.close()

    print("end")

config = {}

if len(sys.argv) >= 2:
    if sys.argv[1] == "-i":
        if len(sys.argv) == 3:
            config['filename_in'] = sys.argv[2]
            go_convert(config)
        else:
            config['filename_in'] = sys.argv[2]
            config['filename_out'] = sys.argv[3]
            go_convert(config)
    else:
        print_usage()
else:
    print_usage()






사용 방법


사용 방법: python md_convert.py [옵션]
옵션:
-i input-file             : 지정된 입력 파일을 사용하여 변환을 하고 입력 파일을 덮어씁니다.
-i input-file output-file : 지정된 입력 파일과 출력 파일을 사용하여 변환을 합니다.


PS1. pre 태그 내에서 소스 코드에 html 관련 코드를 사용할 경우, 충돌이 나서 (특히 pre 태그 관련, 당연한가?) 소스내 모든 <와 >를 &lt;와 &gt;로 바꿔줄 수 밖에 없었습니다.
PS2. 추가 작업 후보 : 소스 md에 줄바꿈이 있을 때만 추가적인 줄바꿈 삽입
,

간단 비교


Setq

Setf

더 적은 용도

더 넓은 용도

Setq를 사용한 모든 곳에 Setf를 사용할 수 있다. 하지만 반대는 안된다.

Low level

High level

Setf는 Setq를 사용하여 구현되어 있다.



결론


특별한 이유가 없으면 Setf를 쓰면 된다!!

,