<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button1"
        android:layout_width="80px"
        android:layout_gravity="center"
        android:layout_height="wrap_content"
        android:text="누르세요" />
    
    <Button
        android:id="@+id/button2" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="누르세요"/>
    
</LinearLayout>
package com.gusfree;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class EventListenerActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.main);//main.xml을 화면으로!

		//1번 버튼을 누르면 a 실행해라 버튼을 찾자
		//2번 버튼을 누르면 b 실행해라

		//UpCasting 발생
		View view =this.findViewById(R.id.button1);
		//다운 캐스팅 시키자
		//xxx를 찾아라. xxx를 찾았다. 남자xxx;
		Button btn1 =(Button)view;

		final TextView tv=//메서드 안에 있는 지역 변수
				(TextView) this.findViewById(R.id.textView1);

		//버튼 누르면 실행될 메서드 연결
		//set + OnClickListener
		btn1.setText("버튼1");
		btn1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				//버튼1을 클릭하면 이쪽으로 제어 이동
				tv.setText("버튼1를 눌렀다.");
			}
		});

		//2번 버튼 누르면 "2번 버튼 눌렀다." 표시하기

		final Button btn2 =
				(Button) this.findViewById(R.id.button2);
		btn2.setText("버튼2");
		btn2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				tv.setText("버튼2를 눌렀다.");
			}
		});
	}
}



-  findViewById (btn1)

찾은결과 : View view; //btn1에 해당하는 뷰;

  Button button = (Button)view;


neo : 트리니티(딱 1명 존재) 를 찾아달라고 요청

어떤사람 사람1호 = 찾은 결과;

어떤여자 여자1호 = 사람1호;


생명체(Object)

     |

    생물(View) 

     |            |

     인간         동물

     |     |

     여자  남자 (Button)


'Android > 2012.04월 강좌' 카테고리의 다른 글

Android review  (0) 2012.04.30
2일차 이벤트2  (0) 2012.04.27
2일차 Layout2  (0) 2012.04.27
2일차 Layout  (0) 2012.04.27
2일차 기본3  (0) 2012.04.27

xml을 새롭게 만들어서 해보자~~



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- textView -->
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="100px"
        android:background="#dd1111"
        android:text="text1" />
    <!-- LinearLayout 수평 -->
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="100px"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="100px"
            android:layout_height="100px"
            android:layout_weight="1"
            android:background="#00ee00"
            android:text="text2" />

        <TextView
            android:layout_width="100px"
            android:layout_height="100px"
            android:layout_weight="1"
            android:background="#0000ff"
            android:text="text3" />
    </LinearLayout>

    <!-- textView -->

    <TextView
        android:layout_width="match_parent"
        android:layout_height="100px"
        android:background="#FFFF33"
        android:text="text4" />

</LinearLayout>



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 이벤트2  (0) 2012.04.27
2일차 이벤트  (0) 2012.04.27
2일차 Layout  (0) 2012.04.27
2일차 기본3  (0) 2012.04.27
2일차 기본2  (0) 2012.04.27
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:orientation="vertical">

    <!-- ctrl+shift+f 자동줄맞춤 -->

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="180px"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="80px"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:background="#dd1111"
            android:text="RED" />

        <TextView
            android:layout_width="80px"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#00ee00"
            android:text="GREEN" />

        <TextView
            android:layout_width="80px"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#0000ff"
            android:text="BLUE" />

        <TextView
            android:layout_width="80px"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#F08080"
            android:text="PINK" />
    </LinearLayout>
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="250px"
            android:background="#ffffff"
            android:text="text1" />
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="250px"
            android:background="#999999"
            android:text="text2" />
    

</LinearLayout>



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 이벤트  (0) 2012.04.27
2일차 Layout2  (0) 2012.04.27
2일차 기본3  (0) 2012.04.27
2일차 기본2  (0) 2012.04.27
2일차 기본  (0) 2012.04.27
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/dolly">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <TextView
        android:layout_width="320px"
        android:layout_height="wrap_content"
        android:background="#ff0000"
        android:text="TextView" >

        <!-- 16*16=256   RGB  #RRGGBB -->
    </TextView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼" >
    </Button>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼2" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher"
        android:background="#77ff0000"
        ></ImageView>

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" 
        android:background="#7799aa"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/ic_launcher" 
        android:background="@drawable/dolly"/>
    
    <!--
          scaleType  
            nothing : default 뷰 크기에 맞게 확대 
    	    matix : 원본사이즈 그대로 
            fixXY : 뷰 크기에 맞게 늘리거나 줄이기
            center : 가운데배치 크기 그대로 가기
            centerCrop : 가운데 배치 비율을 확대 축소
                             + 남는 부분 crop 

    -->

</LinearLayout>
package com.sogangori; 

import android.app.Activity;
import android.os.Bundle;

public class HelloWorldActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        //-----------xml--------------
        
        setContentView(R.layout.main);
        
    }
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 Layout2  (0) 2012.04.27
2일차 Layout  (0) 2012.04.27
2일차 기본2  (0) 2012.04.27
2일차 기본  (0) 2012.04.27
2일차 이미지 출력하기  (0) 2012.04.27
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <TextView 
        android:layout_width="320px" 
        android:layout_height="wrap_content"
        android:text="TextView"
        android:background="#0000"
        >
        <!--  16*16=256  RGB #RRGGBB -->
    </TextView>
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼">
    </Button>
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼2">
    </Button>

</LinearLayout>



R.java 파일은 변경하지 않는다.11번째 줄에 생성이 된다..
package com.sogangori;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int dolly=0x7f020000;
        public static final int ic_launcher=0x7f020001;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
        public static final int myname=0x7f040002;
    }
}

package com.sogangori; 

import android.app.Activity;
import android.os.Bundle;

public class HelloWorldActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        //-----------xml--------------
        
        setContentView(R.layout.main);
        
    }
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 Layout  (0) 2012.04.27
2일차 기본3  (0) 2012.04.27
2일차 기본  (0) 2012.04.27
2일차 이미지 출력하기  (0) 2012.04.27
2일차 리소스의 활용  (0) 2012.04.27
package com.sogangori; 

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

public class HelloWorldActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //set 셋팅해라 what: ContentView how:R.layout.main
       // this.setContentView(R.layout.main);
        
        // 뷰 타입의 객체를 만들어서 화면에 붙이기
        TextView tv=new TextView(this);
        tv.setText("Friday ");
        // tv의 글자 크기 셋팅 해라 30.55f 로
        tv.setTextSize(30.55f);
        // tv의 글자 컬러 셋팅 해라 Color.RED 로
        LayoutParams params=new LayoutParams(100,100);
        tv.setLayoutParams(params);
        
        // tv의 배경 컬러 셋팅 해라 
        tv.setTextColor(Color.GREEN);
        
       // setContentView(tv);
        
        //버튼(Button) 만들어서/글자를 setting/글자컬러set
        //글자크기set/배경컬러set/화면에 띄우기
        Button button=new Button(this);
        button.setLayoutParams(params);
        button.setText(R.string.myname); // 리소스 사용
        button.setTextColor(Color.BLUE);
        button.setTextSize(10);
        button.setBackgroundColor(Color.RED);
       // setContentView(button);
        
        // 자원 resource 활용
        
        // 3.ImageView 이미지를 넣을 수 있는 뷰
        // 파일이름 a-z, 0-9 . - _ 만 허용
        // 파일이름은 소문자로 시작
        
        ImageView imageView=new ImageView(this);
        // setting Image  how: resource (리소스)
        imageView.setImageResource(R.drawable.dolly);
        imageView.setLayoutParams(params);
       // setContentView(imageView);
        
        //방향 선형 ---> 수평 방향
        LinearLayout layout=new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);//수직
        layout.setOrientation(LinearLayout.HORIZONTAL);//수평
        layout.addView(tv);
        layout.addView(button);
        layout.addView(imageView);
        
       //  위쪽의 setContentView 다 주석해야 합니다. 
        setContentView(layout); 
        
    }
}



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 기본3  (0) 2012.04.27
2일차 기본2  (0) 2012.04.27
2일차 이미지 출력하기  (0) 2012.04.27
2일차 리소스의 활용  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27

그림파일을 받아서 res에 저장~~





  src :  java 응용프로그램의 모든 소스 코드를  담는 필수 폴더


⊙ bin :  컴파일된 애플리케이션 코드가 들어감


⊙ gen : 응용로그램을 위해 자동으로 생성된 자원(resource)파일

       들을 담는 필수 폴더 R.java(응용프로그램 자원 관리자 소

       스 파일)자동 생성


⊙ res :  이미지,레이아웃(XML 유저인터페이스),values(화면에 보

              여질 문자들하고 키 보관



                 

      - res/drawable-hdpi/ic_launcher.png  : 고해상도 이미지 폴더 

      - res/drawable-ldpi/ ic_launcher.png   : 저해상도 이미지 폴더

      - res/drawable-mdpi/ ic_launcher.png   : 중해상도 이미지 폴더

      - res/layout/main.xml   : 단일 화면 레이아웃 파일

      - res/values/strings.xml  : 응용프로그램 문자열 자원들 (한중일

                                      미 등등 다양한 언어를 지원해야 할때

                                       values를 여러개 만들어 사용)      







  

/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */

package com.sogangori;

public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int dolly=0x7f020000;
        public static final int ic_launcher=0x7f020001;
    }
    public static final class id {
        public static final int analogClock1=0x7f050003;
        public static final int button1=0x7f050000;
        public static final int ratingBar1=0x7f050002;
        public static final int seekBar1=0x7f050001;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
        public static final int myname=0x7f040002;
    }
}

package com.sogangori;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class HelloWorldActivity extends Activity {
    
	//어플 실행시 호출
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //3.ImageView 이미지를 넣을수 있는
        //파일이름 a-z,0-9,-_ 만 허용
        //파일이름은 소문자로
        
        ImageView imageView =new ImageView(this);
        //setting Image how : resource(리소스)
        imageView.setImageResource(R.drawable.dolly);
        setContentView(imageView);
	}
}




'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 기본2  (0) 2012.04.27
2일차 기본  (0) 2012.04.27
2일차 리소스의 활용  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27
2일차 Text호출,사이즈,컬러  (0) 2012.04.27
<!--?xml version="1.0" encoding="utf-8"?-->
<resources>

    <string name="hello">Hello World, HelloWorldActivity!</string>
    <string name="app_name">01.HelloWorld</string>
	<string name="myname">Lee1000</string>
    
    <!-- 주석은 태그 밖에만 한다. -->
</resources>

package com.sogangori;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;

public class HelloWorldActivity extends Activity {
    
	//어플 실행시 호출
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        Button btn = new Button(this);
        btn.setText(R.string.myname); //리소스 사용
        btn.setTextSize(23.23f);
        btn.setTextColor(Color.BLUE);
        btn.setBackgroundColor(Color.RED);
        setContentView(btn);
        
        //자원 resource 활용
	}
} 




'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 기본  (0) 2012.04.27
2일차 이미지 출력하기  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27
2일차 Text호출,사이즈,컬러  (0) 2012.04.27
1일차 어플 실행시 호출  (0) 2012.04.26

1. 확장자 .xml


2. 첫번째 줄에 선언이 와야함(꼭~~~)


3. 태그 <A></A>가 일치 해야함 (A로 열었으면 A로 닫으라는 소리~~)


4. 태그 이름은 자유 TagName


5. Root Element(맨위의 태그) 는 1개


6. Root Element를 제외한 모든 태그는 부모를 가져야 합니다.

※string의 부모는 resources


7. 주석표기법  " <!-- -->


8. 주석은 태그 밖에 사용한다.





    Hello World, HelloWorldActivity!
    01.HelloWorld
	Lee1000
    
    

'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 이미지 출력하기  (0) 2012.04.27
2일차 리소스의 활용  (0) 2012.04.27
2일차 Text호출,사이즈,컬러  (0) 2012.04.27
1일차 어플 실행시 호출  (0) 2012.04.26
1일차 설치(eclipse setting)  (0) 2012.04.26
package com.sogangori;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class HelloWorldActivity extends Activity {
    
	//어플 실행시 호출
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //뷰 View - Component
        // 텍스트 뷰 TextView
        //텍스트타입 객체명 = new 텍스트 타입(매개 변수);
        
        //set 셋팅해라 what: ContentView ,how: R.layout.main
        this.setContentView(R.layout.main);
        
        //뷰 타입의 객체를 만들어서 화면에 붙이기
        TextView tv = new TextView(this);//매개변수 = Context
        tv.setText("Friday");
        setContentView(tv);//this == Activity
        //tv의 글자 크기 셋팅 해라
        tv.setTextSize(50.55f);
        //tv의 글자 컬러 셋팅 해라
        tv.setTextColor(Color.BLUE);//int RED=-65536 ;
        //tv의 배경 컬러 세팅 해라
        tv.setBackgroundColor(Color.RED);
        
	}
} 	



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 리소스의 활용  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27
1일차 어플 실행시 호출  (0) 2012.04.26
1일차 설치(eclipse setting)  (0) 2012.04.26
1일차 설치( 파일 다운)  (0) 2012.04.26

1.google.KeyBoard.apk 준비 (첨부 파일>>



googleKeyBoard.apk





2.platform-tools 에 apk 파일 이동 및 복사


3.에뮬레이터 구동 후 !!!!!!


4.윈도우 cmd창 열기 (윈도우키+R), 안드로이드 sdk가 설치되어 있는 경로 playform-tools로 이동


6. "adb install googleKeyBoard.apk" 입력





6.설정 > 언어 및 키보드 에서 다른 키보드 설정은 비활성화 시킨다(체크 해제) 구글 한글 키보드만 활성화(체크)




7. 인터넷 들어가서 확인 및 사용



'Android > 설치&세팅' 카테고리의 다른 글

이클립스 안드로이드 셋팅2  (0) 2012.04.26
안드로이드 이클립스 셋팅1  (0) 2012.04.26


클릭후



선택후 설치(이미 설치되어 설치 버튼이 활성화 되지 않았음)

 

 


클릭



Create AVD



Start

기본적인 언어와 시간 셋팅을 합니다




 

 


프로젝트 생성


 

 

다음


 


다음


다음


다음

 

 전체 프로젝트를 눌러서 실행해야됨

메뉴 > helloandroid 실행



실행됨

 


콘솔창 보고 싶으면 하단에 아이콘 클릭



콘솔클릭

일단 저장될 폴더를 생성해 놓습니다


File > Switch Workspace > Other



ok



방문을 합니다 SDK > Download > 자신의 운영체제에 맞는거 받기 
zip = portable
exe = 설치파일


메뉴 help > Install New Software

 

 ADD






 주소는 sdk 받던곳에 plugin 쪽에 있습니다

(에러 나서 https 에서 http로 변경함)


따라하면서 넥스트


 내용은 모르지만 동의 ㅡㅡ;;;

 

 기다리는 자에게 에러가 있나니......(응?)

 

 모름 ok.....


이클립스 재시작

package com.sogangori;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class HelloWorldActivity extends Activity {
    /** Called when the activity is first created. */
    
	//어플 실행시 호출
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //main파일을 화면으로 띄어라
        setContentView(R.layout.main);
        
        //뷰 View - Component
        //1.텍스트 뷰 TextView
        //텍스트타입 객체명 = new 텍스트 타입(매개 변수);
        
        TextView t1 = new TextView(this);//매개변수 = Context
        t1.setText("안녕 텍스트 뷰");
        setContentView(t1);//this == Activity
        
        //2. 버튼 Button
        
        Button btn = new Button(this);
        btn.setText("안녕 버튼");
        //글자 사이즈 셋팅하자 text-size-set=
        //글자 색깔 셋팅. Color.RED
        btn.setTextSize(50.55f);
        btn.setTextColor(Color.RED);//int RED=-65536 ;
        setContentView(btn);
    }
    
	//어플 종료시 호출    
    @Override
    protected void onDestroy() {
    	//onDes까지 타이핑하고 ctrl+spacebar로 자동 생성
    	super.onDestroy();
    }
}




'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 리소스의 활용  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27
2일차 Text호출,사이즈,컬러  (0) 2012.04.27
1일차 설치(eclipse setting)  (0) 2012.04.26
1일차 설치( 파일 다운)  (0) 2012.04.26

새로운 환경을 위해 작업 장소를 바꿔준다.(자바여 안녕~~또 보자~~)




재 시작 후 Help -> Install New Software 



받았던 파일ADT-18.0.0.zip 이 있는곳을  Location에 Path 걸어 주자~~



(펜티엄4로 무지 오래걸림.....시간이 좀걸린다..인내하자~~)



위 에서4개 클릭하고 next  또 next




동의를 해주고 끝내자~~




그럼 이런 창이 뜸 기달리자~~


윈도우7 보안 때문에 뜬거 같은데 오케이 했다 나는...



restart Now~~



그다음 받은 sdk 파일을 압축 풀고 푼곳을 경로를 걸어주자~~



5개만 설치하자 (다하면 하루를 넘길지도 모른다.....모든 버전을 사용하고 싶은분은 전부다...)




꼭 모든 허락을 하고 install




그럼 시간이 좀 걸린다~~~쉬는 시간을~~~




                                             완료가 되면 핸드폰 모양의 안드로보 아이콘 클릭~~


이름은 맘대로 타켓 정해주고 sd 카드는 알아서..사이즈는 HVGV가 적당하다..



생성이 되면 실행을 하자~~



즐거운 안드로이드 개발을 시작 합시다~~(아 펜티엄4에 램 1기가....랩탑으로 작업을 해야하나...)



'Android > 2012.04월 강좌' 카테고리의 다른 글

2일차 리소스의 활용  (0) 2012.04.27
2일차 XML의 특징  (0) 2012.04.27
2일차 Text호출,사이즈,컬러  (0) 2012.04.27
1일차 어플 실행시 호출  (0) 2012.04.26
1일차 설치( 파일 다운)  (0) 2012.04.26

+ Recent posts