426

(9 답글들, 아이디어 및 기능 제안에 작성)

역활(x)->역할. 태워났음(x)->태어났으면.

블로깅이라는 것에 있어서 너무 저널리즘에 집착하고 계신것이 아닌가 하는 생각이 듭니다. 더욱이 이러한 '기준'에 부합하지 않는 글들을 무려 '더러운 것'이라고까지 하시는것에는 거부감마저 느껴지네요. 더욱이, 제시하고 계신 블로그 미디어는 결과적으로 기성 미디어와 별반 다를것이 없어보입니다. 블로그가 저널리즘이라는 측면에서 기성 미디어와 근본적으로 다른 점을 꼽으라면, 단연 자유로운 발언과 의견의 피력이겠지요. 이것을 오히려 특정한 유명 블로그에서 형성된 '신뢰'를 우선기준으로 하여 '필터링' 한다는 것은 이것을 역으로 가둬버리게 되지 않나 싶습니다. 분명히 말할 수 있는 전제는, '블로그' 라는 전체적인 틀에 대한 신뢰도가 향상되더라도 모든 블로그의 신뢰도가 높이 평가되지는 못한다는 것이니까요.

또한 언론에서 만든 이슈를 블로그가 필터링한다? 이슈의 흐름이 그 반대가 되어야 정상이 아닐까요.
블로그들이 만들어낸 이슈, 즉 '여론'을 기성 언론이 취합, 보충하는 아젠다 세팅이 오히려 이상적이라 생각합니다.

427

(6 답글들, 버그 보고 및 QA (Quality Assurance)에 작성)

그래피티님// 1.xml 파일 내용을 올려주시면 파악하는데 좀 더 도움이 되겠지요 ' ㅅ')/

428

(6 답글들, 버그 보고 및 QA (Quality Assurance)에 작성)

오류라고만 생각해서 한참 헤맸는데, 알고보니 버그네요ㆀ

배포본에서는 blog/rss/index.php 이고, 개발본에서는 lib/model/rss.php 에 해당합니다.
refreshRSS() 의 문제입니다.

1.0.5 부터 추가된 기능중, 발행 상태인 글만 RSS 로 내보내는 옵션이 있지요.
이 정보를 담고 있는 변수가 $blog['publishEolinSyncOnRSS'] 인데,
이것이 0 (false) 라는 것은 공개 상태인 글도 포함하여 출력하고 1 일때 발행 상태인 글만 출력해야 정상입니다.

function refreshRSS() 아래로 10번째 줄부터 다음과 같이 되어있습니다:
if($blog['publishEolinSyncOnRSS']) {
$result = mysql_query("SELECT e.*, c.name AS categoryName FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id WHERE e.owner = $owner AND e.draft = 0 AND e.visibility >= 2 AND e.category >= 0 ORDER BY e.published DESC LIMIT {$blog['entriesOnRSS']}");
} else {
$result = mysql_query("SELECT e.*, c.name AS categoryName FROM {$database['prefix']}Entries e LEFT JOIN {$database['prefix']}Categories c ON e.owner = c.owner AND e.category = c.id WHERE e.owner = $owner AND e.draft = 0 AND e.visibility = 3 AND e.category >= 0 ORDER BY e.published DESC LIMIT {$blog['entriesOnRSS']}");
}

문제점, 찾으셨나요?

이 구문대로라면 $blog['publishEolinSyncOnRSS'] 가 true(1) 일때 공개 상태 이상(visibility >= 2) 인 글을 발행하고, false(0) 일때 발행상태 (visiblity =3)인 글만 반환합니다. 실제로는 이 반대가 되어야 맞겠지요. 때문에 if($blog['publishEolinSyncOnRSS']) 를 if(!$blog['publishEolinSyncOnRSS']) 또는 if($blog['publishEolinSyncOnRSS'] == 0) 으로 바꾸어 주어야 정상적으로 동작합니다.

그렇지 않아도 그 부분 구현을 위해 설계해보고 있는 중입니다...만. 온라인상에서 나이를 판별할 수 있는 기준은 주민번호뿐인데, 요즘은 워낙 사고들이 많아서 주민번호를 입력하라 하면 바로 거부감 느끼는 분들이 많죠. 그렇다고 공인된 신용정보기관에 일일히 돈주고 인증받자니 그 비용부담도 만만치 않고..

뭔가 쌈빡!한 연령인증 방법 없을까요 ' ㅡ ')

430

(7 답글들, 잡담하기에 작성)

Smarty 는 활용에 비해 지나치게 무겁다는 느낌입니다. 현재 태터의 템플릿 방식이 '최고다!' 라고 하기야 좀 뭣합니다만,
편의성면에서는 훨씬 낫지 않은가 합니다. JH 님의 오리지널 태터에 비해서는 기능이 많아진 만큼 복잡해지기도 했지만,
여전히 태터보다 더 쉬운 템플릿도 별로 없을것 같네요.

개인적으로 제로보드5 가 별로 반갑지는 않습니다.
혹자는 왕의귀환이니 어쩌니 하면서 호들갑을 떨던데...까놓고 말하면 적당히좀 해먹지-_- 싶은;

개발소스를 기준으로 말하면 lib/view/view.php 에 해당하겠네요 ' ㅅ')

432

(29 답글들, 공지사항에 작성)

저도 일단은 참석예정입니다 ' ㅅ')/ 일정이 어떻게 될런진;

....그 플러그인을 쓰지 않는데도 유사한 문제가 발생하는건 왤까요 (먼산)

http://tattertools.com/ko/forum/viewtopic.php?id=316

제가 일전에 보고했던 문제와 함께, 말씀하신 문제 때문에 아주 골머리를 앓고 있습니다ㆀ
그냥 훑어봐서는 딱히 문제될 곳이 없어보이는데 나는 오류라서 더욱 진이 빠지네요;

범인은 이 안에 있다! 이긴 한데, 단서가 너무 적어요[...]
그렇다면 수사는 원점으로?!

trunk 기준으로 lib/model/reader.php 에 들어가는 내용입니다.
배포본에서는 blog/owner/reader/action/group/edit/index.php 입니다.

editFeedGroup() 함수에서 다음과 같은 구문을 통해 피드 그룹명을 변경하도록 되어있습니다.

mysql_query("UPDATE {$database['prefix']}FeedGroups SET title = '$title' WHERE id = '$id'");

정작 owner 가 지정되어 있지 않기 때문에, 다중 사용자 모드에서는 다른 사람의 그룹명을 멋대로 바꾸는 결과가 발생합니다.
때문에 아래와 같이 바꿔주어야 할 것 같습니다.

mysql_query("UPDATE {$database['prefix']}FeedGroups SET title = '$title' WHERE owner = '$owner' and id = '$id'");

RSS리더에서 모든 피드 업데이트를 클릭하면 blog/owner/reader/update/index.php 를 호출합니다.

그 내용중에:

$feeds = fetchQueryAll("SELECT f.* FROM {$database['prefix']}Feeds f, {$database['prefix']}FeedGroups g, {$database['prefix']}FeedGroupRelations gr WHERE g.owner = $owner AND gr.feed = f.id AND gr.groupId = g.id ORDER BY f.title");

이 구문을 통해 업데이트할 피드의 목록을 얻어오는데요, 테스트 해 본 결과로는 자신의 피드목록만을 가져오는게 아니라 전체 사용자의 피드 리스트를 가져와버리더군요. 때문에 불필요하게 업데이트 속도가 느려지는 현상이 있었습니다. 이것을 아래와 같이 바꿔주면 정상적으로 동작합니다.

$feeds = fetchQueryAll("SELECT DISTINCT f.* FROM {$database['prefix']}Feeds f, {$database['prefix']}FeedGroups g, {$database['prefix']}FeedGroupRelations gr WHERE gr.owner = '$owner' AND gr.feed = f.id AND gr.groupId = g.id ORDER BY f.title");

test1.html 작성:

Before: <FONT COLOR="#FF0000">ABCD</FONT>
After: <font color="#FF0000">ABCD</FONT>

Before: <font color="#FF0000">ABCD</FONT>
After: <font color="#FF0000">ABCD</font>

test2.html 작성:

Before: <FONT COLOR="#FF0000">ABCD</FONT>
After: <font color="#FF0000">ABCD</FONT>

Before: <font color="#FF0000">ABCD</FONT>
After: <font color="#FF0000">ABCD</font>

이렇게 봐서는 결과가 동일합니다 'ㅂ'

일단 찾아낸 것은 html2ttml 의 마지막 부분에 들어가는 while 을 통과하면 태그가 죽는다는 것입니다.
그 이전에 끊어버리면 코드가 그대로 살아남습니다.

현재 코드는 이렇습니다

while(result = regTag.exec(str)) 
    {
        var tagBody = result[0];
        var tagStart = "<" + result[1];
        var tagFinish = result[3] + ">";

        if(tagStart == "<!--")
            continue;

        var attributeString = result[2];

        var regAttribute = new RegExp("(\\s*[^=]*)=((?:\"[^\"]+\")|(?:'[^']+')|(?:[^\\s]+))", "g");

        var attributes = new Array();

        while(result = regAttribute.exec(attributeString))
            attributes.push(new Array(result[1].trim(), result[2].replace(new RegExp("['\"](.*)['\"]", "g"), "$1").trim()));

        var sb = new StringBuffer();

        for(var i in attributes) 
        {
            if(trim(attributes[i][0].toLowerCase()) == "style") 
            {
                var regStyle = new RegExp("([\\w-]+): ([^;]*)", "gi");
                var sbStyle = new StringBuffer();

                while(result = regStyle.exec(attributes[i][1]))
                    sbStyle.append(result[1].toLowerCase() + ": " + result[2] + "; ");

                sb.append(" style=\"" + sbStyle.toString().replace(new RegExp("(.*); $", "g"), "$1") + "\"");
            }
            else
                sb.append(" " + attributes[i][0].toLowerCase() + "=\"" + attributes[i][1] + "\"");
        }

        var tagAttributes = sb.toString();

        switch(tagStart.toLowerCase()) 
        {
            case "<img":
            case "<br":
            case "<hr":
                tagFinish = (tagFinish == ">") ? "/>" : tagFinish;
        }

        if(tagStart.toLowerCase() == "<img" && tagAttributes.indexOf("alt=") == -1)
            tagFinish = ' alt=""' + tagFinish;

        str = str.replaceAll(tagBody, tagStart.toLowerCase() + tagAttributes + tagFinish);
    }

여기에서 이전 버전의 코드와 차이가 있는 부분은

tagFinish = " alt=\"\"" + tagFinish;
str = str.replace(tagBody, tagStart.toLowerCase() + tagAttributes + tagFinish);

두 가지 뿐인데, 이것을 1.0.4 코드로 교체해도 좀 오락가락 합니다ㆀ

글 목록에서는 #EEEEEE 로 mouseover 시 해당 줄의 색을 변경하고 있을텐데요'  ㅂ'

음, 말씀해주신 구문을 통해서 얻어지는 결과는 정상적인 HTML 이 나옵니다.
http://yooe.be/tmpshot.jpg

파폭이 죽는건 첨 겪어보는 일이라 당황스러워요;;

r100 기준입니다. changeset 을 확인해본바로는 에디터쪽은 변화가 없는듯하니 현재 그대로 진행형인 문제가 아닐까 싶어 올립니다.
1.0.4 에서는 없었던 문제인데, editor.js 를 놓고 판단하기에는 딱히 문제를 일으킬 만한 부분을 찾을수가 없네요.

IE6 에서, 위지윅 상태에서 HTML 로 전환하는 경우 위지윅에서 적용했던 html 효과들이 모두 사라집니다.
그러나 HTML 상태에서 입력한 태그는 위지윅 상태로 전환하더라도 유효하며 다시 HTML 상태로 왕복해도 여전히 사라지지 않습니다.

위지윅 -> 텍스트을 위한 변환 함수가 html2ttml() 이고, 그 반대의 경우 ttml2html() 이죠?
그렇다면 분명 html2ttml 함수의 어딘가에 버그가 있다고밖에 판단할 수 없는 상황인데요,
이 부분의 diff 결과만 놓고봐서는 딱히 문제가 된다고 판단될 만한 코드를 못찾아내겠습니다ㆀ

이 외에, FF 1.5.0.3 에서 위지윅 -> 텍스트 모드 변환시, HTML 속성을 입히지 않은 상태에서는 문제가 없으나
일부라도 HTML 속성이 입혀진 상태에서 모드 변환을 시도하면 잘못된 연산을 일으키며 웹브라우저가 종료됩니다.

왠만큼 사소한건 priority 를 내려두려고 했는데, 이 문제는 아무래도 우선해결대상에 두어야 뒷탈이 없을것 같습니다.

현재 contentWidth 자체가 미약하지 않나요? 에디터에서 이것을 반영하여 크기를 결정하기는 하지만 index.xml 에서 정해준 값과 skin.html 에서 실제 지정하는 값이 달라도 딱히 오류가 나지는 않습니다. 좋은 아이디어이기는 합니다만 일단 아직은 둥둥 떠다니는 contentWidth 의 역할을 확실히 자리잡아 주고나서야 반영이 가능하지 않을까 싶습니다.

버전명을 봐서는 r119 까지의 묶음인것 같네요. 수고하셨습니다~ wink
요즘 열심히 개조중인데 TODO 하나가 끝나면 새로운 revision 이 나오니 발맞춰가기도 진땀이ㆀ

445

(5 답글들, 잡담하기에 작성)

punbb 도 ... 그렇게 호락호락 하진 않더군요 (한숨푸욱)

crizin 작성:

실제 개발을 진행하는 원본 소스는 라이브러리가 따로 독립된 일반적인 형태로 돼있는데요, 라이브러리의 덩치가 너무 크다보니 이걸 모두 include 하는건 퍼포먼스에서 많은 손해를 보기 때문에 배포판은 라이브러리 함수를 각각의 실행파일에 모두 끼워넣어주는 optimize 과정을 거쳐 만들어지게 됩니다

개인적으로는 수정과 개발에 용이한 편을 선호하는 편입니다. include 나 require 를 이용하는 경우에 대한 퍼포먼스 저하를 이론상으로야 이해하지만 딱히 실감하지 못하는 것도 있습니다. 혹 관련 자료를 알고 계신것이 있으시다면 알려주시면 큰 도움이 될 것 같습니다. 한편 include 를 따라가서 모두 끼워넣어주는 optimize 툴에 대해서 이름이나 힌트라도 >_<;;

nobody can make you assured of which version will be featured with team blogging, I think.
already lots of tickets puted off to 1.0.6 or later. you'd better not to follow up developers.
be patient wink

그냥 글쓰기 상태로 들어갈때 임시저장본 보기를 선택한뒤 지우고 새 글을 쓰면야 되겠지만 어째 마음이 영 찝찝해요.
draft 를 제거할 수 있는 기능을 추가하면 어떨까 싶습니다. 기능 자체는 어려운 일이 아니지만, 드래프트에 대한 취급을 어떻게 해야할지가 좀 애매하네요.

첨부파일 목록을 클릭하면 미리보기에 보이게 되지요. 그런데 mp3, wma 등의 미디어 파일은 바로 음악이 나오기 시작합니다.
취향에 따라 이것이 편할수도 있겠습니다만 최소한 play/stop control 을 포함해야 하지 않을까 하는 생각을 합니다.

생각나는대로 또 포스팅 하겠습니다 wink

에러를 재현하지는 못했습니다만, 일단 코드를 봐서는 setup.php 89번째줄에서 멈춘것 같습니다.
display_errors 가 off 되어 있기 때문에 그냥 멈춘것으로 보입니다.
저 위치에서 <span class="step"> 다음에 바로 <?=_f('%1단계', 1)?> 가 이어지거든요.

정확한 오류 확인을 위해서는 setup.php 의 도입부에 있는 ini_set('display_errors', 'off'); 을 on 으로 바꾸고 다시 시도해보셔야 할 것 같습니다.

450

(6 답글들, 버그 보고 및 QA (Quality Assurance)에 작성)

http://yooe.be/readerbug0.jpg

좀 쉬고나서 맑아진 머리로 차근차근 살펴보니 저렇게 되는건 한글이 깨지는 문제인듯도 싶군요.
그런데 만약 끝이 깨지지 않았더라도, " 는 \" 로 출력되지 않았을까요?' ㅅ'a