SELECT name, count(*) cnt, t.id FROM `tc_Tags` t,
                                `tc_TagRelations` r,
                                `tc_Entries` e
                                WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.blogid = 11 AND e.blogid = 11
                                GROUP BY r.tag
                                ORDER BY RAND() limit 30

order 가 무작위이다 보니 더욱더 속도가 느려지는 것 같습니다. 대부분 slow쿼리에 등록되는 놈이 이것들입니다.

차라리 쿼리를 분리해서 e.visibility > 0인 entry.id를 구해서  in()을 쓰는게 어떨지...

제가 티켓팅 하겟습니다. ^^

심각한 에러는 아닌데요.

/owner/skin/sidebar/setPlugin

이나.

/owner/center/cover/coverpage/setPlugin

때 ajax콜할때 결과값이 뜨지 않습니다.

일부러 막아두신건 아니겠지만, 혹시나 에러 처리결과를 리턴해주는게 좋지 않을까 해서요. ^^

tc1.5.4분들을 위해 정규님 코드 보고 간단한 패치 하나를 만들어봤습니다.

http://yupmin.ddanzimovie.com/entry/tc1 … peed_patch

^^

그냥 getScriptsOnFoot 함수 무효화보다, 1.6에서 RSS기능을 끄는 옵션을 사용하니 20개의 글이었을때의 경우 1.5.4보다 20ms 더 줄었습니다.

근데 옵션 끔으로 무효화된건 함수뿐인데...왜 아까 함수 무효화보다 빠를까요? -_-

암튼 조금이라도 빠른데요 ^^

----------------------

아 리더 라이브러리 들이 빠지는 군염...-_-

RSS리더 관련 부분을 config.php에 넣으시면 어떨까요? 리더를 사용하는것에 대한 설정을요...^^

리더같은 경우에는 사용안하는 사람도 많으니깐요.

그렇군요.

TNM에서 파워블로거들에게 TextCube를 몇번 쓰게 했는데, 그대마다 서버가 죽어버리는 일이 생기지만,(-_-a)
최대한 텍스트 큐브를 파트너들이 쓸수 있도록 고민하는 중입니다.
특히나 다양한 기능들이 첨가된 버젼들을 바라는 분들이 많더군요.

이미지나 스킨등을 다른 서버에 두는 TC 확장형이 가능할까도 고민입니다.

혹시 이미지나, 스킨의 이미지 기본 url을 분리할수 있을지요?

그냥 적어봅니다. ^^

두개 버젼을 같은 서버에 두고 똑같은 데이타를 넣어서 돌려봤는데요.

tc 1.5.4쪽이 감으로도 빠르다는 느낌이 들어, debug모드로 돌려봤는데, 역시나 차이가 있더군요.

출력갯수 10개 :
tc 1.5.4    tc1.6b1
293.8    334.2
288.8    332.6
297.8    330.5
295.8    330.4
299.5    349.2

출력개수 20개 :
386.4    447.2
382.2    448.8
393.2    455

출력갯수 30개 :
564.6    600
563.3    597
546.1    651
534.7    634.3
573.5    587.7
536.5    622.9

tc1.6b1이 더 갯수와 상관없이 30~40ms정도 느리군요.
테스트용으로 돌리는 서버라 외부에서의 접속도 없는 바라 믿을 만할껍니다. tc1.6에 더 많은 최적화를 하시는 것으로 알고 있는데 의외네요...-_-

간혹 너무 큰 사진을 입력하는 사람들이 있더군요. 그 상태에서 그 포스트를 보면 에러가 납니다.

리샘플링 기능을 켜두면 php에서 할당한 메모리 사이즈 정도의 이미지크기가 리샘플링을 허용할 메모리 사이즈보다 크면 에러가 나는거죠. 1600X1200 이런 크기의 이미지일때말이죠.

차라리 에러에 대비해 리샘플링기능을 그 사진만 자동으로 꺼주거나, 아니면 메모리 사이즈 이상의 이미지면 에러처리 메세지를 나오게 해주는게 좋지 않을까 합니다.

사진 크기가 커서 리샘플링하는 건데, 올리는 사진이 크다고 에러가 나면 문제인 것 같습니다.

검색이 오래걸려서 쿼리를 보고 있던중 똑같은 내용의 쿼리인데 캐쉬가 안되더군요.

이유를 보니 where 절의 질의문 순서가 바뀌고, Entries e 뒤에 스페이스가 하나 더 있더군요.

암튼 아래와 같이 바꾸니 캐쉬처리가 되더군요.  version은 1.5.3.1입니다.

/lib/model/blog.entry.php

function getEntryListWithPagingBySearch($blogid, $search, $page, $count) {
    global $database, $suri, $folderURL;
    $search = escapeMysqlSearchString($search);
    $cond = strlen($search) == 0 ? 'AND 0' : "AND (e.title LIKE '%$search%' OR e.content LIKE '%$search%')";
    $visibility = doesHaveOwnership() ? '' : 'AND e.visibility > 1 AND (c.visibility > 1 OR e.category = 0)';
    $sql = "SELECT e.blogid, e.userid, e.id, e.title, e.comments, e.slogan, e.published 
        FROM {$database['prefix']}Entries e 
        LEFT JOIN {$database['prefix']}Categories c ON e.blogid = c.blogid AND e.category = c.id 
        WHERE e.blogid = $blogid AND e.draft = 0 $visibility AND e.category >= 0 $cond 
        ORDER BY e.published DESC";
    return fetchWithPaging($sql, $page, $count, "$folderURL/{$suri['value']}");
}

모델쪽 쿼리중에 이런거 스페이스 하나때문에 캐쉬가 되나 안되나가 판가름 나네요.

무지개 플러그인은 무지 옛날껀데요. 현재의 텍스트 큐브 이올린 플러그인과 충돌을 일으킵니다.
이올린 사용자중에서 문의가 들어와서 확인해 보니 무지개 플러그인이 이올린 플러그인 자바스크리트 부분(치환)을 덮어쓰더군요.

당연히 무지개 플러그인을 만드신분이 먼저 고치셔야 하는 문제이지만...

리포팅은 해두겠습니다. ^^

무재개 플러그인
http://retro.tattertools.com/ko/bbs/vie … amp;no=214

아직 반영을 안하신건지 해서 적어 봅니다.
lib/function/includeForIcon.php에..

require 'function/mysql.php';

에 있어 에러가 납니다. db 단위를 분리시키는 일에서 생긴 문제인거 같네요..아님 고려하고 계신건가요? ^^

r4585에는 function/mysql.php가 없더군요. 암튼...^^
그리고 lib/function/includeForIcon.php에서 mysql.php를 빼니 다른 잘 돌아가는군요..

아참...config.php 파일에 추가하니...

requireComponent('Needlworks.Function.Debug');

다음에러가 나더군요.

Undefined index: private(8)
File: /home/yupmin/tc/lib/model/blog.category.php:147

회사에서 테스트겸 최신버젼으로 co 했는데 나더군요. -_-

session.use_trans_sid 환경변수가 구 브라우저(쿠키가 안되는) 세션을 위해 url에 ?TSSESSION=XXXXX값을 붙여주는 역활인것 같습니다. cafe24의 옛날 php(4.4.1)에서는 ini_set('session.use_trans_sid', '0'); 게 안먹히는 지. 문제가 생겼구요.

암튼 그래도 사용을 위해 다음과 같이 수정했습니다. 이 비슷한 구문들은 자칫 무한 반복의 위험이 있는 것 같습니다.

file : /blog/owner/index.php
$url = rtrim(isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_NAME'], '/');
$url = preg_replace('/\?[\w\&=]+/', '', $url);
header("Location: $url/center/dashboard");

그러니깐....낮은 PHP버젼에서는 세션을 첫 url에 붙이게 되는 것 같습니다.

php 5 버젼에서는 그런게 없더군요.

처음만 그런거죠. 그다음부터는 세션이 만들어지니깐, 필요없고요.

http://www.phpschool.com/classroom/session/index.html

Session ID Propagation (세션 ID 전달)

PHP4 세션은 세션ID 전달을 위해 아래의 방법들을 지원합니다.

   쿠키 (디폴트)

   GET/POST

   직접 입력하거나 자동으로 재지정된 URL에 감춰져서



쿠키는 페이지들간에 세션 ID를 주고받는 기본적인 방법입니다.

쿠키가 잘 된다면 다른 설정에 대해 걱정할 필요가 없습니다.

다른 일반적인 방법은 GET/POST로 ID를 전달하는 것입니다.

이 경우 URL은 script.php3?<session-name>=<session-id> 와 비슷한 형태가 될 것입니다.

global constant SID를 이용해 이러한 URL을 만들 수 있습니다.

중간에 나오는군요. -_-

다시한번 상황이 발생하는 때는 처음 화면로딩하고 곧바로 관리자로 들어갔을때입니다.

아 그리고 더 알아보니 session.use_trans_sid=On 입니다. (자동으로 세션을 링크에 달아주는 기능인듯). 근데 ini_set('session.use_trans_sid', '0'); 코드가 안먹히나 본가요? 좀더 알아보겠슴다. ^^

?? 잘 된다니요 ??

한 컴터에서만 안되는게 아니라 대부분 다른 컴터에서도 다 안되는데요. 윈도뿐만 아니라, osx에서도 안되네요.
tsession관련해서 무한 루프 도는듯 합니다.

상황이 발생하는 때는 처음 화면로딩하고 곧바로 관리자로 들어갔을때입니다.

apache_1.3.37
PHP Version 4.4.1

tc 버젼은 r4041
입니다.

흠 코드를 보니 낮은 PHP에서는 첫 session을 url에 붙이는가 본데요. 그러다 보니 다음 코드에서 ?TSESSION=XXXXXX가 owner뒤로 붙는 관계로 무한반복이 됩니다.

file : /blog/owner/index.php

/// Copyright (c) 2004-2007, Needlworks / Tatter Network Foundation
/// All rights reserved. Licensed under the GPL.
/// See the GNU General Public License for more details. (/doc/LICENSE, /doc/COPYRIGHT)
$url = rtrim(isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_NAME'], '/');
header("Location: $url/center/dashboard");

"header("Location: $url/center/dashboard");" 전에 낮은 php버젼을 위해 URL에서 TSESSTION 패턴을 지우도록 해야 할듯 합니다.
tattertools 전버전에서는 문제가 없었으니 과거 코드중에 해답이 있을 것 같기도 한데요.

처음 접속후 관리자 화면을 클릭하면 화면이 넘어가지 않습니다.
호스팅은 cafe24 입니다.
Textcube 1.5 Release Candidate 2  구요.

http://ddanzimovie.com


관리자 클릭해 보시면...

다음과 같이 tsession이 링크에 붙는데, 무시무시한 링크 아마 무한 루프 같습니다.
시간이 없어 자세히는 안봤습니다.


http://ddanzimovie.com/owner?TSSESSION=55eac1b473813d62492246903da8c462/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard/center/dashboard

생각해 보니 elapsed 타임이 0이 될 쿼리(캐쉬커리말고)가 있겠냐 만은...혹시나 해서 다시 소스 수정안을 내봅니다.

    foreach( $__tcSqlLog as $c => $log ) {
        $elapsed[$count] = array( $log['elapsed'], $count, $log['cached'] ? "cached":"" );
        $__tcSqlLog[$c]['percent'] = sprintf("%4.1f", $log['endtime']*100/$__tcPageEndTime);
        $count++;
    }

    arsort( $elapsed );
    $bgcolor = array();
    foreach( array_splice($elapsed,0,5) as $e ) {
        if($e[2] !=  "cached")
            $top5[$e[1]] = true;
    }

늦었지만, 저도...tnc의 윤영진입니다.
yupmin at gmail.com

Needleworks.Function.Debug.php를 써서 Debug 할때, 캐쉬되지 않는 쿼리가 5개이하일때 캐쉬되는 쿼리가 top5안에 들어오기도 합니다. 뭐 한페이지에 텍스트큐브에서 캐쉬되지 않은 쿼리가 설마 5개 이하일때가 있을지 모르지만...

암튼 이유는..

    foreach( array_splice($elapsed,0,5) as $e ) {
        $top5[$e[1]] = true;
    }

소팅한다음에 무조건 5개를 잡는데, 캐쉬는 elapsed 타임이 0이므로 가끔씩 캐쉬 쿼리가 top5에 올라오기도 하는 거죠..
그래서 다음과 같이 수정해야 할것 같습니다.

    foreach( array_splice($elapsed,0,5) as $e ) {
        if($e[0] !=  0)
            $top5[$e[1]] = true;
    }

^^

저도 이번에 Tag Suggest 부분을 보면서 같은 생각이 들었는데요.
영어권의 문제가 아니라도 공용태그의 효율성들을 극대화하는 것이 좋지 않을까 해요.
사용자에게 다시 핵심되는 태그를 Suggest해주는 기능이 좀더 의미있고, 편리하지 않을까 하는 것이죠.

요즘 시대가 시대인지라, 갑작스런 사건 사고에 포스트들이 올라올때 그에 붙이는 태그들이 천차만별이라, 태그가 분산된다는 느낌이 듭니다.

대충 방식은 전체 태그들을 관리자가 서로 의미별로 연결해준다거나 정리해주는 것이죠. 사용했던 태그를 의미론적으로 연결하는 거죠.

예)
웹2.0 = Web2.0 : '웹2.0 태그'(a)와 'Web2.0 태그'(b)는 '같다'(c).
스타워즈 > 스타워즈 에피소드 2 : '스타워즈'(a)는 '스타워즈 에피소드 2'(b)에 '포함된다'(c).
eland -> 이랜드 : 'eland'(a)는 '이랜드'(b)의 '국어식 변역'(c)이다.

이런 데이타들을 잘만 축적해 놓으면 좋은 데이타들이 될것도 같습니다.
그리고 이런식으로 쉽게 정리하면 태그의 Suggest 기능도 좀더 발달하지 않을까 합니다.