#인천서구자원봉사센터 #꽁스캠페인 #한전KPS

회사 동료의 꼬심에 못이겨 핸들을 에어로바로 바꿨다 ㅎㅎ

에어로바로 바꾸니 핸들 잡긴 넘 편하고 좋은데 문제는 기존에 쓰던 비엠웍스 스피드 익스텐더2 를 장착할 수 없다는거 ㅜㅜ

한동안 스템에 브라이트을 장착하고 다녔다. 고개를 푹 숙여야 화면이 보여서 정말 불편했더랬지... ㅋ


에어로바 에는 결국 스템 볼트형 마운트를..
 
폭풍 검색 하기 시작~  REC 마운트, 알리에서 파는 것 등등 여러 개 고민 중에 가격적인 면에서 세림 멀티 마운트로 맘을 굳혔당
(알리는 배송이 넘 오래 걸려서 포기)

금욜 오전 출근하면서 주문한 마운트가 토욜 오후 도착 ㅎㅎ 역시 배송 빨라 넘 좋음

드뎌 도착한 세림 멀티 마운트 ㅎ


기존 스템 볼트 풀고 각도 조심조심 하며 열심히 조립 하는데 세림 볼트가 길어서 고정이 안되는 문제에 봉착 ㅜㅜ

기존 스템에서 와셔 빼와서 고정하느라 이래저래 좀 고생하긴 했지만 장착 완료~ ㅎㅎ


얼마나 보기 편해졌는지 테스트 라이딩 ㄱㄱ









지난 토요일 일하고 받은 대체 휴무~

오전엔 와이프와 조조로 택시운전사도 봤고 간만에 비도 그쳤겠다 

집에서 가까운 아라뱃길로 고고싱 샤방하게 남-북단 한바퀴 돌아 본다 ㅎㅎ


브라이튼 스트라바 연동해서 사용하는 상태라 리라이브도 연결~

리라이브에서 만들어준 라이딩 영상 ㅎㅎ 쫌 괜춘한듯

 

완차 구매시 달려있던 브레이크는 텍트로였다


지난 5월 국토종주때 낙동강 매협제 다운힐시 제동이 너무 안되어 미끌어져서 겨우 내려온 뒤로 호시탐탐 브레이크 교체시기만 노렸는데 4개월이 지나서야 교체 하게되었다~
(휠셋, 바테잎, 클릿, 클릿 슈즈 교체하느라 이제서야 ㅠㅠ )

9월 13일 아침 설레는 기분으로 목동에 있는 고X바이크로 고고싱~

10시쯤 도착 했을때 마침 매장 청소를 시작하는 중이었다. 청소와 함께 바로 교체 시작~


교체 하고 나니 뭔가 좀 있어 보인다 ㅋ

이제 다시 복귀 라이딩~ 음... 텍트로 브레이크 보다 훨신 브레이크 감이 좋다 ㅜㅜ 힘도 덜들고 제동력도 좋아진듯..
이건 진작 바꿨어야해!!

바꾸고 나서 든 생각이지만 총알만 더 있었으면 바로 울테로 갔을텐데 ㅎㅎ

당분간 만족하며 즐겁게 라이딩 해야겠당~

5월 1일 부터 시작하는 연휴에 작년에 이어 올해도 부산-인천 국토종주를 위해 하계용 장갑을 찾던 중 맘에 드는 녀석을 발견~ 


바로.. 아덴바이트웨어 프로 글러브 반장갑 



특히 맘에 들었던건 손바닥의 망사(?) 부분

이렇게 설명도 친절히~ ㅎㅎ

사용감이 좋긴 좋았던거 같다.. 쿠션 부분도 괜찮았고.. 헌데.. 통풍과 그립감이 좋을진 몰라도... 내구성은 너무 약한거 같다.. 


국토 종주 2일째.. 이화령 정상에서 오른쪽 손바닥이 시원해서 보니 요렇게.. ㅜㅜ



망사라 꼬맬수도 없공..쩝.. 이번 시즌 요걸로 버텨야 하나... 


라이딩 몇번 하지두 안았는데.. 


볼땐 시원해 보여 좋았는데 사용해 보니 손등과 같은 스판 소재가 더 좋지 않았을까 하는 생각이 들었다.


좀 아쉬움이 남는 아덴바이크웨어 프로 글러브 였던거 같다..




SELECT 
UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(LOB컬럼,2000, 1)) FROM
LOB테이블

'IT > DB' 카테고리의 다른 글

[SYBASE] isql 관련  (0) 2008.09.21
[SYBASE] isql 접속  (0) 2008.09.20
[SYBASE] 기본 교육  (0) 2008.09.20
[MSSQL] 게시판의 페이지 형태로 읽어오는 Stored Procedure  (0) 2008.09.20
[ORACLE] PL/SQL 정리  (0) 2008.09.20

IBM JAVA DUMP 설정 

.profile 에 설정하여 사용할수 있다.

 #### IBM JAVA dump ####
export IBM_HEAPDUMP=true
export IBM_HEAP_DUMP=true
export IBM_HEAPDUMP_OUTOFMEMORY=true
export IBM_JAVADUMP_OUTOFMEMORY=true
export IBM_HEAPDUMPDIR=/app_log/anylink/ibm_heap
export IBM_JAVACOREDIR=/app_log/anylink/ibm_core


jconsole을 이용한 로컬 PC에서 linux에 설치된 jeus 모니터링

 

1. "hostname -i"를 실행했을 때 결과로 "127.0.0.1"이 아닌 자기 IP가 나올 수 있게 설정해 준다. /etc/hosts 파일 수정.

127.0.0.1               hostname     localhost.localdomain localhost

아래와 같이 실제 IP와 hostname을 추가해준다.

127.0.0.1               localhost.localdomain localhost
xxx.xxx.xxx.xxx (localip)           hostname  <-- 추가

 

2. JMX 원격 접속을 할 수 있는 비밀번호를 설정한다. JRE_HOME/lib/management/jmxremote.password.template 파일을 복사해서 JRE_HOME/lib/management/jmxremote.password 파일을 생성하고 아래의 주석처리되어 있는 부분의 주석을 제거한다.


# monitorRole QED
# controlRole R&D

monitorRole  QED
controlRole   R&D


3. jeus세팅 $JEUS_HOME/config/`hostname`/JEUSMain.xml 의 <node>절의 <command-option>에

아래와 같이 추가해준다.($JEUS_HOME/bin/jeus 파일에 추가해도 됨.)

          <command-option>

               -Dcom.sun.management.jmxremote

            -Dcom.sun.management.jmxremote.port=port번호(ex 12345)

            -Dcom.sun.management.jmxremote.authenticate=false

            -Dcom.sun.management.jmxremote.ssl=false

         </command-option>           


4. 로컬 PC의 jconsole을 실행 하여 jeus가 실행되고 있는 remote 서버에 connect

(jconsole은 C:\Program Files\Java\jdk1.5.0_16\bin 에 위치 JDK1.5부터 지원)

cmd 창에서 jconsole 실행한다.

C:\>jconsole


HOST or IP : remote의 ip

Port : 3번에서 -Dcom.sun.management.jmxremote.port=port번호(ex 12345)로 설정해준 포트

User Name : 2번의 JRE_HOME/lib/management/jmxremote.password 파일의 monitorRole

Password 2번의 JRE_HOME/lib/management/jmxremote.password 파일의 QED

 

5. 모니터링 화면



* jconsole을 이용하여 로컬 PC에서 실행 되는 java application도 모니터링 가능하다.

java 실행시 -Dcom.sun.management.jmxremote 옵션으로 실행

java -Dcom.sun.management.jmxremote TCPServer


jconsole의 Local 탭의 해당 application의 PID를 선택한다.


아래와 같이 로컬PC에서 실행되는 application을 모니터링 할수 있다.

   

DHTML 속도 향상을 위한 몇 가지 팁

Mark Davis
Microsoft Corporation

요약: 이 기사는 성능에 주로 영향을 주는 일부 DHTML 기능에 대해 설명하고 사용자의 DHTML 페이지 기능을 향상시킬 수 있는 몇 가지 팁을 제시합니다(9페이지/인쇄 페이지 기준).

목차

소개
DHTML 변경 내용 일괄 처리
InnerText 사용
DOM을 사용한 개별 요소 추가
SELECT 요소에서 사용자 옵션 확장
DOM을 사용한 테이블 업데이트
한번 쓰기, 여러 번 사용
지나치게 동적인 속성은 피할 것
데이터 바인딩의 유용성
문서에 Expando 속성을 사용하지 말 것
클래스와 스타일 규칙을 전환하지 말 것
상위 요소를 찾기 전에 텍스트 범위를 축소
기타 자료

소개

Microsoft® Internet Explorer 4.0에 동적 HTML(DHTML)을 도입함으로써 웹 페이지 제작자 및 개발자에게 새로운 프로그래밍 모델 사용을 가능하게 했습니다. 이후 웹 페이지 제작자는 이 강력한 기능을 사용하여 웹 사용자에 대한 다양한 대화식 환경을 활성화함으로써 동적인 컨텐트, 스타일, 위치 지정 등을 제공하게 되었습니다. DHTML의 유연성은 종종 두 가지 이상의 방법을 제공하여 사용자가 원하는 작업을 수행하도록 합니다. 사용자의 요청을 처리하는 Internet Explorer의 HTML 구문 분석 및 렌더링 구성 요소를 이해하면 최상의 작업 방법을 결정할 때 많은 도움이 됩니다. 이 기사는 성능에 주로 영향을 주는 일부 DHTML 기능에 대해 설명하고 사용자의 DHTML 페이지 기능을 향상시킬 수 있는 몇 가지 팁을 제시합니다.

맨 위로

DHTML 변경 내용 일괄 처리

DHTML 웹 페이지 성능을 증가시키는 가장 중요한 방법은 HTML 컨텐트의 변경 내용을 적용하는 방법을 개선하는 것입니다. 웹 페이지를 업데이트하는 여러 가지 방법이 있다는 것을 알아 두어야 합니다. 클라이언트 스크립팅에서부터 웹 페이지 제작자는 여러 블록의 HTML 텍스트를 적용하거나 DHTML 개체 모델(영문 사이트) 또는 W3C 문서 개체 모델(DOM)(영문 사이트)을 사용하여 개별적인 HTML 요소에 액세스 할 수 있습니다. HTML 컨텐트에 변경 내용이 발생할 때마다 Internet Explorer의 HTML 구문 분석 및 렌더링 구성 요소는 해당 페이지의 내부 표시를 재구성하고 문서의 레이아웃 및 흐름을 다시 계산해서 변경된 내용을 표시해야 합니다. 실제 성능은 변경 내용과 웹 페이지 컨텐트에 따라 달라지지만 이러한 작업은 비용이 많이 들게 됩니다. 개별 요소를 액세스하는 대신 HTML 텍스트 블록을 적용하는 경우에는 HTML 파서가 호출되어야 하므로 추가 성능 비용을 초래하게 됩니다. HTML 텍스트를 허용하는 메서드와 속성에는 insertAdjacentHTML(영문 사이트) 및 pasteHTML(영문 사이트) 메서드와 innerHTML(영문 사이트) 및 outerHTML(영문 사이트) 속성이 포함됩니다.

팁 1: 하나의 스크립트 함수에서 HTML 컨텐트를 변경하십시오. 마우스 움직임에 대한 응답처럼 여러 이벤트 처리기를 사용하는 경우 한 위치에서 변경하십시오.

HTML 구문 분석 및 구성 요소 렌더링에 대한 중요한 또 다른 사실은 스크립트 이벤트 처리기 함수가 있는 경우나 setTimeout(영문 사이트)과 같은 메서드가 호출되는 경우와 같이 일단 어떤 스크립트가 제어권을 반환하면 레이아웃을 다시 계산하여 웹 페이지를 표시한다는 것입니다. 이제 Internet Explorer가 변경 내용을 처리하는 방법에 대해 알게 되었으므로 웹 페이지 성능 향상을 시작할 수 있습니다.

팁 2: 여러 업데이트를 수행하는 대신 HTML 문자열 하나를 작성하여 문서를 변경해 보십시오. HTML 컨텐트가 필요하지 않다면 innerText(영문 사이트) 속성 사용을 고려해 보십시오.

다음 예에서 느린 메서드는 innerHTML 속성을 설정할 때마다 HTML 파서를 호출합니다. 성능을 향상시키기 위해 문자열을 작성한 후에 innerHTML 속성이 할당되도록 할 수 있습니다.

실행 비교

느린 메서드:

  divUpdate.innerHTML = "";
 for ( var i=0; i<100; i++ )
 {
  divUpdate.innerHTML += "<SPAN>This is a slower method! </SPAN>";
 }

빠른 메서드:

  var str="";
 for ( var i=0; i<100; i++ )
 {
  str += "<SPAN>This is faster because it uses a string! </SPAN>";
 }
 divUpdate.innerHTML = str;

자세한 내용은 동적 컨텐트(영문 사이트)를 참조하십시오.

맨 위로

InnerText 사용

DHTML 개체 모델에서 HTML 요소의 텍스트 컨텐트는 innerText(영문 사이트) 속성을 통해 액세스되는 반면 W3C DOM은 별도의 하위 텍스트 노드를 제공합니다. DHTML innerText 속성을 직접 사용하면 DOM의 createTextNode(영문 사이트) 메서드를 호출하는 것 보다 더 빨리 요소 컨텐트를 업데이트할 수 있습니다.

팁 3: innerText 속성을 사용하여 텍스트 컨텐트를 업데이트하십시오.

다음 예는 innerText 속성을 사용하여 성능을 향상시키는 방법을 보여 줍니다.

실행 비교

느린 메서드:

  var node;
 for (var i=0; i<100; i++)
 {
  node = document.createElement( "SPAN" );
  node.appendChild(  document.createTextNode( " Using createTextNode() " ) );
  divUpdate.appendChild( node );
 }

빠른 메서드:

  var node;
 for (var i=0; i<100; i++)
 {
  node = document.createElement( "SPAN" );
  node.innerText = " Using innerText property ";
  divUpdate.appendChild( node );
 }

맨 위로

DOM을 사용한 개별 요소 추가

앞서 언급했던 것처럼 HTML 텍스트를 적용하여 액세스하는 방법은 HTML 파서를 호출하므로 이에 따른 성능 손실이 발생합니다. 이러한 이유 때문에 insertAdjacentHTML 메서드에 대한 단일 호출을 수행하는 대신 createElement(영문 사이트)와 insertAdjacentElement(영문 사이트) 메서드를 사용하여 요소를 추가하는 것이 더 빠릅니다.

팁 4: createElementinsertAdjacentElement 메서드를 호출하는 것이 insertAdjacentHTML 메서드를 호출하는 것보다 빠를 때가 있습니다.

DHTML 업데이트를 일괄 처리하고 insertAdjacentHTML 메서드에 대한 단일 호출을 수행하면 성능을 향상시킬 수는 있지만 DOM에서 직접 요소를 만드는 것이 더 효율적인 경우가 있을 수 있습니다. 그러므로 두 가지 방법을 모두 시도하여 어떤 것이 빠른지 결정하는 것이 좋습니다.

실행 비교

느린 메서드:

  for (var i=0; i<100; i++)
 {
  divUpdate.insertAdjacentHTML( "beforeEnd", "<SPAN> Uses insertAdjacentHTML() </SPAN>" );
 }

빠른 메서드:

  var node;
 for (var i=0; i<100; i++)
 {
  node = document.createElement( "SPAN" );
  node.innerText = " Uses insertAdjacentElement() ";
  divUpdate.insertAdjacentElement( "beforeEnd", node );
 }

맨 위로

SELECT 요소에서 사용자 옵션 확장

HTML 텍스트 메서드 사용에 관한 이전의 규칙에 대한 예외는 SELECT(영문 사이트) 요소에 많은 OPTION(영문 사이트) 요소를 추가할 때입니다. 여러 옵션에 액세스하려면 createElement 메서드를 호출하는 것보다 innerHTML 속성을 사용하는 것이 더 효율적입나다.

팁 5: SELECT 요소에 많은 옵션을 추가하려면 innerHTML을 사용하십시오.

문자열 연결을 사용하여 SELECT 요소 HTML 텍스트를 작성한 뒤 이 팁을 사용하여 innerHTML 속성을 설정합니다. 옵션이 많은 경우에는 문자열 연결도 성능에 영향을 미칠 수 있습니다. 이런 경우에는 배열을 만들고 Microsoft JScript® join(영문 사이트) 메서드를 호출하여 OPTION 요소 HTML 텍스트의 최종 연결을 수행합니다.

실행 비교

느린 메서드:

  var opt;
 divUpdate.innerHTML = "<SELECT ID='selUpdate'></SELECT>";
 for (var i=0; i<1000; i++)
 {
  opt = document.createElement( "OPTION" );
  selUpdate.options.add( opt );
  opt.innerText = "Item " + i;
 }

빠른 메서드:

  var str="<SELECT ID='selUpdate'>";
 for (var i=0; i<1000; i++)
 {
  str += "<OPTION>Item " + i + "</OPTION>";
 }
 str += "</SELECT>";
 divUpdate.innerHTML = str;

더 빠른 메서드:

 var arr = new Array(1000);
 for (var i=0; i<1000; i++)
 {
  arr[i] = "<OPTION>Item " + i + "</OPTION>";
 }
 divUpdate.innerHTML = "<SELECT ID='selUpdate'>" + arr.join() + "</SELECT>";
 

맨 위로

DOM을 사용한 테이블 업데이트

DHTML 테이블 개체 모델에 속해 있는 insertRow(영문 사이트) 및 insertCell(영문 사이트) 메서드를 사용하는 것 보다 DOM 메서드를 사용하여 테이블 행 및 셀을 삽입하는 것이 더 효율적입니다. 특히 크기가 큰 테이블을 만들 때 효율적입니다.

팁 6: 크기가 큰 테이블을 작성하려면 DOM 메서드를 사용하십시오.

실행 비교

느린 메서드:

  var row;
 var cell;
 for (var i=0; i<100; i++)
 {
  row = tblUpdate.insertRow();
  for (var j=0; j<10; j++)
  {
    cell = row.insertCell();
    cell.innerText = "Row " + i + ", Cell " + j;
  }
 }

빠른 메서드:

  var row;
 var cell;
 var tbody = tblUpdate.childNodes[0];
 tblUpdate.appendChild( tbody );
 for (var i=0; i<100; i++)
 {
  row = document.createElement( "TR" );
  tbody.appendChild( row );
  for (var j=0; j<10; j++)
  {
    cell = document.createElement( "TD" );
    row.appendChild( cell );
    cell.innerText = "Row " + i + ", Cell " + j;
  }
 }

맨 위로

한번 쓰기, 여러 번 사용

웹 사이트에서 공통적인 작업을 수행하는 데 스크립트를 사용한다면 둘 이상의 웹 페이지에서 재사용할 수 있도록 이러한 함수를 별도의 파일에 두는 것이 좋습니다. 스크립트 파일을 사용하면 코드 유지 관리를 향상시킬 뿐 아니라 스크립트 파일이 브라우저 캐시에 남아있게 되므로 웹 사이트를 방문하는 동안 사용자 컴퓨터에 한 번만 다운로드하면 됩니다. 개별 파일에도 일반 스타일 규칙을 적용하면 동일한 효과를 얻을 수 있습니다.

Tip 7: 공통 코드를 동작 또는 개별 파일에 두어 스크립트를 재활용하십시오.

스크립트 재활용 기능 향상을 위해 DHTML 첨부 또는 요소 동작(영문 사이트)에 공통 스크립트 작업을 배치하십시오. 동작은 스크립트를 재활용하고 HTML에서 액세스 가능한 구성 요소를 작성하여 사용자 고유의 개체, 메서드, 속성 및 이벤트를 사용한 DHTML 개체 모델 확장을 가능하게 합니다. 동작이 viewlink(영문 사이트) 기능을 사용하지 않는 경우 Internet Explorer 5.5 에서 사용 가능한 lightweight(영문 사이트) 동작 기능을 사용하면 코드 간략화를 더욱 효과적으로 수행할 수 있습니다. 또한 스크립트 코드가 단일 SCRIPT(영문 사이트) 블록 내에 있는 경우 성능을 더욱 향상시킬 수 있습니다.

지나치게 동적인 속성은 피할 것

동적 속성(영문 사이트)을 통하여 웹 페이지 제작자는 속성 값으로 식을 사용할 수 있습니다. 이 식은 실행 시간에 계산되어 속성에 그 결과 값을 적용합니다. 이 기능은 강력합니다. 페이지 스크립트 양을 감소시킬 수 있지만 식이 주기적으로 다시 계산되고 종종 다른 속성 값에 따라 변하기 때문에 성능에 좋지 않은 영향을 줄 수도 있습니다. 위치 지정 속성인 경우에는 특히 그러합니다.

팁 8: 동적 속성 사용을 자제하십시오.

맨 위로

데이터 바인딩의 유용성

데이터 바인딩(영문 사이트)은 웹 페이지의 HTML 요소에 데이터베이스 쿼리 결과 값 또는 XML 데이터 섬(영문 사이트) 컨텐트를 바인딩할 수 있는 강력한 기능입니다. 또한 데이터를 가져오기 위해 서버로 돌아가지 않고도 데이터 정렬 및 필터링 기능 및 다른 데이터 뷰를 제공할 수 있습니다. 회사의 데이터를 선 그래프, 막대 그래프 또는 파이 차트로 나타내고 지점, 제품 또는 판매 기간별로 데이터를 정렬하는 단추가 있는 웹 페이지를 상상해 보십시오. 한 번만 서버를 방문하면 이 모든 기능을 제공할 수 있습니다.

팁 9: 다양한 클라이언트쪽 데이터 뷰를 제공하려면 데이터 바인딩을 사용하십시오.

데이터 바인딩에 대한 자세한 정보는 다음 기사를 참조하십시오.

맨 위로

문서에 Expando 속성을 사용하지 말 것

expando(영문 사이트) 속성은 모든 개체에 추가할 수 있는 임의 속성입니다. 이 속성은 현재 웹 페이지에 정보를 저장하는 경우 유용하며 DHTML 개체 모델을 확장하는 또 다른 방법을 제공합니다. 예를 들어 HTML 요소에 clicked 속성을 할당하여 어느 요소가 클릭되었는지를 알려주는 데 사용할 수 있습니다. 이벤트를 발생시켜 이벤트 처리기 함수에 추가적인 컨텍스트 정보를 제공하는 경우에도 expando 속성을 사용할 수 있습니다. expando 속성을 어떻게 사용하건 document(영문 사이트) 개체에는 이 속성을 설정하지 마십시오. 속성을 설정하면 속성을 액세스할 때 문서가 추가적인 재계산을 수행해야 합니다.

팁10: window(영문 사이트) 개체에 expando 속성을 설정하십시오.

실행 비교

느린 메서드:

for (var i=0; i<1000; i++)
 {
  var tmp;
  window.document.myProperty = "Item "+i;
  tmp = window.document.myProperty;
 }

빠른 메서드:

for (var i=0; i<1000; i++)
 {
  var tmp;
  window.myProperty = "Item "+i;
  tmp = window.myProperty;
 }

맨 위로

클래스와 스타일 규칙을 전환하지 말 것

클래스와 스타일 규칙을 전환하면 재계산과 전체 문서 레이아웃이 필요하기 때문에 부담이 큰 작업이 될 수 있습니다. 웹 사이트의 컨텐트를 다른 방법으로 보기 위해 스타일시트를 사용하는 경우, 요소의 className(영문 사이트) 속성이나 styleSheet(영문 사이트) 개체를 수정하는 대신 변경할 요소의 style(영문 사이트) 개체를 직접 수정하는 것이 좋습니다.

팁 11: 컨텐트 표시를 변경할 때 style 개체를 직접 수정하십시오.

상위 요소를 찾기 전에 텍스트 범위를 축소

TextRange(영문 사이트) 개체는 사용자가 선택하거나 BODY(영문 사이트)와 같은 HTML 요소에서 가져온 텍스트의 영역입니다. 텍스트 범위의 상위는 parentElement(영문 사이트) 메서드를 호출해 확인합니다. 복잡한 문서 범위는 parentElement 메서드를 호출하기 전에 collapse(영문 사이트) 메서드를 호출하는 것이 효율적입니다.

팁 12: parentElement 메서드를 액세스하기 전에 텍스트 범위를 축소하십시오.

자세한 내용은 TextRange 개체 사용(영문 사이트)을 참조하십시오.

맨 위로

기타 자료

성능에 대한 다른 정보를 보려면 다음 기사를 참조하십시오.

Mark Davis는 Internet Explorer SDK 설명서 팀의 소프트웨어 디자인 엔지니어입니다. 그는 Internet Explorer 연구에 빠져 있거나 시간이 나면 미국 서북부 지역을 하이킹하는 것이 취미입니다.

 

Tistory 태그:

+ Recent posts