[PHP] 세션 유지 관련


   PHP 개발을 하다보면 브라우저 별 종료 후 재 실행을 해도 로그인 상태로 나와 있는 경우가 있다. 이 경우 PHP.ini 값을 적절히 조정 해야 할 필요가 있다. 자세한것은 아래 링크를 보면서 이해하자.


1. 링크 링크 링크!!

    - 세션 유지 관련 01

    - 세션 유지 관련 02

    - 세션 유지 관련 03(일어)

    - 세션 유지 관련 04

    - 세션 유지 관련 05

[JAVA] Collection과 Map 등 자료 구조에 대해 알아보자.


출처 : http://withwani.tistory.com/150


포스트 내용의 참고자료 출처 : 소설같은자바 Third Edition

   

JAVA에서 기본적인 자료 구조를 제공하기 위한 환경을 JAVA Collection Framework라고 한다.

다음은 JAVA Collection Framework의 상속 기본 구조이다.

  

   

  1. Collection

    Collection 인터페이스를 상속받아 List와 Set 인터페이스가 된다. List는 순서가 있는 Collection, 그리고 List는 Data 중복을 허락한다. 하지만 Set은 순서의 의미가 없으며 Data를 중복해서 포함할 수 없다.

  • List 인터페이스의 특징
    • 순서가 있는 Collection.(이 순서는 삽입된 순서를 의미한다.)
    • Data를 중복해서 포함할 수 있다.
    • Stack의 특징
      • Data의 삽입과 추출이 후입선출(Last-In First-Out) 구조로 되어 있다.
      • push() method : Data 삽입할 때 사용
      • pop() method : Data 추출할 때 사용
      • peek() method : 추출할 Data를 삭제하지 않고 Data만을 가져 올 때 사용
      • search() method : Stack으로부터 Data를 검색할 때 사용
    • Vector의 특징
      • 자동으로 동기화를 보장해준다.
      • ArrayList에 동기화가 보장되도록 최적화한 클래스이다.
      • JAVA 5.0 이 후로는 AutoBoxing/AutoUnBoxing을 지원한다.
        • AutoBoxing이란? 기본 Data 타입을 Wrapper 클래스형의 객체로 자동으로 변환해주는 기능. AutoUnBoxing은 AutoBoxing의 반대 개념
        • JAVA 1.4까지

Vector v = new Vector();
v.addElement(new Integer(100));

  • JAVA 5.0이후

Vector v = new Vector();
v.addElement(100); // AutoBoxing 발생, 자동으로 Wrapper class인 Integer로 변경

  • addElement() method : Data를 삽입할 때 사용
  • elementAt() method : Data를 추출할 때 사용, Index에 해당하는 객체를 얻어냄
  • size() method : Vector 내에 존재하는 객체의 수를 얻어낼 대 사용
  • insertElementAt() method : Vector 내에 중간 삽입할 때 사용
  • setElementAt() method : Vector 내에 존재하는 Data를 수정할 때 사용
  • indexOf() method : Vector 내에 Data를 검색할 때 사용, Index를 반환
  • contains() method : Data의 존재 유무를 알기 위해 사용.
  • ArrayList의 특징
    • 동기화를 보장해주지 않는다.
    • 배열에 동적 메모리 증가 기능을 구현한 클래스이다.
    • 동기화 지원 방법 : List list = Collections.synchronizeList(new ArrayList(…));
    • add() method : Data 삽입할 때 사용
    • get(0 method : Data 추출할 때 사용
    • toArray() method : ArrayList로부터 배열 얻어낼 때 사용
    • contains() method : Data의 존재 유무를 알기 위해 사용
    • size() method : ArrayList의 요소 개수를 얻어낼 때 사용
  • Set 인터페이스의 특징
    • 집합적인 개념의 Collection
    • 순서의 의미가 없다.
    • Data를 중복해서 포함할 수 없다.
    • HashSet의 특징
      • add() method : Data 삽입할 때 사용
      • next() method : Data 추출할 때 사용
        • HashSet의 Data 추출은 Iterator을 이용하면 된다. Iterator는 Collection내의 모든 Data에 접근할 수 있는 특징이 있다. 그리고 Data의 마지막에 상관하지 않고 검색하기 위한 인터페이스이다. Set의 Iterator() method로 Iterator를 얻어 낼 수 있으며, Iterator의 hasNext() method를 이용해서 Data 끝을 만날 때까지 next() method를 호출해서 Data를 추출할 수 있다.

Iterator<String iter = set.iterator();
while(iter.hasNext()) {
String temp = iter.next();

System.out.print(temp + ", ");
}

  • remove() method : Data를 삭제할 때 사용
  • contains() method : Data의 포함여부를 알기 위해 사용
  • size() method : HashSet의 요소 개수를 얻어낼 때 사용

       

  1. Map

    List와 Set이 순서나 집합적인 개념의 인터페이스라면 Map은 검색의 개념이 가미된 인터페이스이다. Map 인터페이스는 데이터를 삽입할 때 Key와 Value의 형태로 삽입되며, Key를 이용해서 Value를 얻을 수 있다.

  • Hashtable, HashMap의 공통점
    • 내부적으로 모두 Hash 기법을 이용한다.
    • Map 인터페이스를 구현하고 있다.
    • Key와 Value를 이용해서 Data를 관리한다.
  • Hashtable, HashMap의 차이점
    • Hashtable은 동기화가 보장된다.
    • HashMap은 동기화가 보장되지 않는다.
    • HashMap의 동기화 지원 방법 : Map m = Collections.synchronizedMap(New HashMap(…));
  • Hashtable, HashMap과 HashSet과의 관계
    • Hashtable과 HashMap은 둘 다 Map 인터페이스를 구현하고 있다.
    • HashSet은 내부적으로 Hash기법을 사용하지만 Set인터페이스를 구현하고 있다.
  • HashMap
    • 객체 생성 : Map<String, Integer> map = new HashMap<String, Integer>();
    • put() method : Data 삽입할 때 사용
    • get() method : Data를 추출할 때 사용, argument값은 Key를 사용
  • Hashtable
    • 객체 생성 : Hashtable<String, Object> h = new Hashtable<String, Object>();
    • put() method : Data 삽입할 때 사용
    • get() method : Data를 추출할 때 사용, argument값은 Key를 사용

   

  1. Sorted

    Set과 Map 인터페이스를 상속받아 정렬 기능이 추가된 SortedSet과 SortedMap 인터페이스가 된다. 그리고 이들은 각각 TreeSet 클래스와 TreeMap 클래스로 구성된다. TreeSet과 TreeMap은 Set과 Map의 기능을 가지고 있으면서 정렬 기능이 가미되었다는 것이 특징이다.

  • Sorted를 지원하지 않는 클래스
    • HashSet, HashMap
  • Sorted를 지원하는 클래스
    • TreeSet, TreeMap
  • TreeMap
    • Key와 Value로 Data를 관리
    • Key를 기준으로 오름차순으로 정렬된다.
    • Map 인터페이스를 상속한 SortedMap 인터페이스를 구현한 클래스
  • TreeSet
    • Set 인터페이스를 상속한 SortedSet 인터페이스를 구현한 클래스
    • 데이터들이 자동으로 오름차순으로 정렬된다.
  • Comparator
    • TreeSet과 TreeMap은 사용자가 직접 정렬의 방식을 지정할 수 있다.
    • TreeSet과 TreeMap은 정렬을 위한 Comparator 인터페이스를 구현하면 된다.
    • TreeSet에 Data를 집어 넣으면 기본적으로 오름차순(Ascending) 정렬이 되지만 그것도 문자열이나 기본 데이터 타입과 같은 단순한 것에만 해당된다. 이에 사용자가 직접 비교법을 넣어주기 위해 사용하는 것이 Comparator 인터페이스이다.
    • Comparator의 구현 방법 : Comparator 내부에 compare() method를 구현하면 된다.

class Mycomparator<T> implements Comparator<T> {
public int compare(T o1, T o2) {
// 비교방법 구현
}

  • Comparator가 추가된 TreeSet의 생성

TreeSet<Score> tset = new TreeSet<Score>(new MyComparator<Score>());

  • Comparator가 추가된 TreeMap의 생성

TreeMap<Score, String> tset = new TreeMap<Score, String>(new MyComparator<Score>());

  • 일반적인 정렬기능의 사용
    • HashSet이나 HashMap을 정렬 기능이 지원되는 TreeSet이나 TreeMap으로 변환해서 사용
    • HashSet을 이용한 TreeSet 생성

Set<String> set = new HashSet<String>();
...
TreeSet<String> ts = new TreeSet<String>();
ts.addAll(set);

  • HashMap을 이용한 TreeMap 생성

Map<String, Integer> map = new HashMap<String, Integer>();
...
Map<String, Integer> sortedMap = new TreeMap<String, Integer>();
sortedMap.putAll(map);

   

[안드로이드] 로또 어플 업데이트, 통계 - 회기분석 추가


    간만에 기능이 추가 되었습니다. 통계에 회기분석이 추가 되었습니다. 로또 하시는 분들이면 대부분 아시는 기능이라 생각이 됩니다. 한번 사용 해보시기고 미미 한 점이 있으면 피드백주시면 빠르게 수정 하도록 하겠습니다. ^^






[웹개발] 개발하면서 참고한 내역들


    그냥 개발하다가 참고한 내역들 정리 해 놓는 포스팅. 언젠간 또 필요하게 될지 모르니깐 말이다.


1. 태그에 여러가지 스타일 주는 방법

   - http://egloos.zum.com/nis7/v/1988543


2. xxx.xxx.xxx/dir 형식의 주소의 의문점? 실제 dir이란 디렉토리가 있을 수 있지만 rewrite를 이용하는 듯??

   - http://egloos.zum.com/antamis/v/804339


3. jquery 관련

   - 동적 사이즈 변경 01

   - 동적 사이즈 변경 02

   - 웹페이지가 로딩 된 화면이 모바일인지 PC인지 구분

[PHP/MYSQL] Excel이나 Csv 파일로 저장하기, 쿼리 및 Mysql 프로시저 사용 법 등


    PHP 웹 개발시 가끔 사용자들이 데이터를 csv나 excel파일로 내려 받도록 요구하는 경우가 있다. 네이버나 구글 검색 해 보면 많은 예제들이 있다. 여기도 몇개의 예제 링크를 남겨 놓을 까 한다.


1. Excel이나 Csv 파일로 저장하기

   - http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=59076

   - http://stackoverflow.com/questions/217424/create-a-csv-file-for-a-user-in-php


2. 특정 날짜를 이용하여 주차를 구한 후 주차의 시작일을 구하는 쿼리

   - http://wus1590.blogspot.kr/2014/04/mysql.html


3. Mysql의 프로시저 사용 법

   - http://egloos.zum.com/it79/v/1032459



[안드로이드] View에 날짜를 보여줄 경우 포맷 관련






we use make use of Calender class of java.util package , the static method getInstance of Calender class returns the  instance of Calender and this object can produce all the time field values  needed to implement the date-time format

 Calendar c = Calendar.getInstance();

After getting calendar Instance , we required a formatted object for date and time.

The SimpleDateFormat Class is used for setting the format , the constructor of this class takes the pattern describing what strings are to produced

SimpleDateFormat format = new SimpleDateFormat("dd:MMMM:yyyy HH:mm:ss ");
String formatdate=format(c.getTime());


file : activity_main.xml
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/display"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="22sp" />

</RelativeLayout>

file : MainActivity
package com.example.sysdatetime;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

 TextView tv;
 Button btn;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  tv = (TextView) findViewById(R.id.display);

  Calendar c = Calendar.getInstance();

  SimpleDateFormat format1, format2, format3, format4, format5;

  format1 = new SimpleDateFormat("dd:MM:yyyy:HH:mm:ss ");

  format2 = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss");

  format3 = new SimpleDateFormat("dd-MMMM-yyyy-HH-mm-ss");

  format4 = new SimpleDateFormat("dd/MMM/yyyy/HH/mm/ss");

  format5 = new SimpleDateFormat("dd_MM_yy_HH_mm_ss a");

  tv.setText(format1.format(c.getTime()) + "\n\n"
    + format2.format(c.getTime()) + "\n\n"
    + format3.format(c.getTime()) + "\n\n"
    + format4.format(c.getTime()) + "\n\n"
    + format5.format(c.getTime()));

 }
}


In this below table you can see the patterns description for date time and also the separator which is used for formatting.

Date format 

Date FormatDescriptionValue
dSingle digit date eg 11
dddouble digit date eg 0101
MSingle digit month eg: 11
MMDouble digit month eg: 0101
MMMthree letter abbreviation for month ex: janjan
MMMMmonth spelled out in full ex : januaryjanuary
yydouble digit year ex : 1414
yyyyfour digit year ex : 20142014



Time Format 

Time FormatDescriptionValue
hsingle digit hours in 12hours format9
hhdouble digit hours in 12 hour format09
Hsingle digit hours in 24 hour format8AM as 8
8PM as 20
HHdouble digit hours in 24 hour format8AM as 08
8PM as 20
msingle digit minute9
mmdouble digit minute09
ssingle digit second9
ssdouble digit second09
aMarkeram/pm



Separator 

FormatDescription
" . "Dots or full stops
" _ "Hyphens or dashes
" "Spaces
" : "colon mostly used between time
" / "Slash


[PHP] PHP에서 메일 보내기, 파일 보내기, PHP.ini 환경설정 관련


1. PHP에서 메일 보내기

   - mail 함수를 이용한 메일 보내기


2. 파일 업로드 하기

   - php 메뉴얼

   - 업로드 예제 01

   - 업로드 다운로드 예제 

   - 다운로드 예제

   - 한글 문제 발생시 iconv


3. 환경변수 및 기본기

   - $_SERVER['PHP_SELF'] 하면 현재 작업중 파일의 경로를 가져온다

   - php.ini의 환경변수들 설명


[워드프레스] 워드프레스 작업 후 도움 되었던 내용


   친구가 워드프레스 관련 수정 건으로 요청 하여 관련 내용을 찾아보며 작업 했던 내역을 남겨 놓고자 한다.


1. 워드프레스 관련 

  - 워드프레스는 내부 함수가 굉장히 많고 외부 플러그인을 지원 한다. 내부 함수 중 db관련 wpdb에 관한 내용

  - wpdb 관련 01

  - add_filter과 add_action

  - Bulk Action(일괄작업) 만들기

  - 관리자 화면에서 user 리스트 관련 Bulk Action 만들기

  - 모르는 함수나 클래스는 여기서 검색하자

[웹개발] PHP 반복문, 변수 받아오기, 함수 알아보기, Mysql Insert 후 자동증가값 가져오기


   PHP를 많이 사용하지 않아 근례 웹 개발을 하게 되어 조금씩 알아가는 중이다. 아주 기초만 알고 있었기에 개발시 필요한 내장함수 및 반복문 등 사용법을 기록 해놓고자 한다.


1. PHP 반복문 및 GET, POST등의 변수 한번에 받기, Mysql Insert 후 고유값 받기 등

  - foreach문에 대해서

  - html에서 배열을 받아오 php에서 변수로 받아 foreach를 사용하여 처리

  - 변수를 배열로 compact, extract, list 사용법

  - extract를 이용하여 POST로 넘어온 변수 한번에 받기

  - 가변변수 : 변수안에 있는 값과 동일 한 변수명의 값을 가져온다 골뱅이사용(@)

  - php에서 Mysql db에 Insert 후 해당 테이블의 자동증가값을 가져온다. 이 값은 프라이머리키인 경우가 많기 때문에 업데이트나 다른 테이블에 사용 될 수 있다.

[웹개발] PHP 경고 메세지 설정 및 Mysql 로그 설정 관련


   PHP 경고를 보여 주도록 설정하면 가끔 쓸데 없는 Notice 메세지까지 보여주게 되는데 그러한 부분과 Mysql 쿼리 로그 설정 세팅 등을 알아 보자!!


1. PHP 경고 메세지 관련 및 Mysql 쿼리 로그 보기

  - Strict warning: strtotime(): It is not safe to rely on the system's timezone settings. 메세지 대처

  - notice 안보이도록 하기

  - Mysql 로그 설정으로 SELECT, UPDATE, INSERT 문 등 실행문 확인 하기

[웹개발/DB] Mysql 및 PHP에서의 Datetime 포맷 관련, 두 날짜 사이 시간


   Mysql에서 쿼리 하거나 PHP에서 날짜를 변경 하는 방법이 필요 해 정리 해보았다. db와 웹언어라 사용 방법이 다르니 잘 정리 해 놓아야 겠다.


1. Mysql에서 날짜 타입의 여러가지 사용 방법

  - Datetime 포맷 지정하기는 방법

  - 시간차이 구하기 (일, 월, 년) 

  - 날짜 및 시간을 컨트롤 하는 방법(시간을 더한 다든지 등등)


2. PHP에서의 날짜 타입 사용 방법

  - php에서의 날짜 포맷 및 변환

  - php에서의 날짜 포맷 및 변환 02

  - php에서의 날짜 포맷 및 변환 03

[웹개발] jquery 날짜 및 시간, POST로 페이지 이동하기


1. 날짜 시간 관련 플러그인

  - jquery-ui를 이용한 datepicker

  - 위의 것 설명 : http://www.nextree.co.kr/p9887/ 

  - 위의 것 설명2 : http://windowx.tistory.com/entry/jQueryUI-Datepicker-Calendar-%EC%82%AC%EC%9A%A9%EB%B2%95

  - 위의 것 설명3 : http://cafe.naver.com/crmsoft/8396

  - date, time input mask 플러그인

  - 플러그인이 아닌 마스크로 주기로 해결 하기


2. POST 방식으로 페이지 이동하기 

  - http://longbluesky.tistory.com/4004

  - POST 방식으로 이동 및 데이터만 전송

  - 데이터만 전송하기

[웹개발] PHP + HTML + 자바스크립 + CSS + MYSQL 개발 링크 정리.


1. 참고로 삼은 CSS 껍데기들 링크

  - http://www.sanwebe.com/2013/10/css-html-form-styles

  - http://www.onextrapixel.com/2012/10/26/custom-style-all-your-form-elements-with-pure-css-and-no-javascript/

  - 메뉴바 : http://red-team-design.com/css3-dropdown-menu/

  - HTML5 : http://webdesign.tutsplus.com/tutorials/bring-your-forms-up-to-date-with-css3-and-html5-validation--webdesign-4738


2. 제이쿼리와 자바스크립트

  - 폼에서 submit 버튼 클릭시 체크 사항이 있을 경우 제이쿼리 사용방법

  - 자바스크립트 : location의 사용 방법


3. HTML 관련

  - HTML 태그 정리

  - Hidden 태그 : input type를 hidden으로 주자 일반 사용자와는 관련없는 php로 데이터 넘길 때 사용


4. MYSQL 인덱스 관련

  - 실행계획 보는 방법

 


[안드로이드] 로또 어플 개발 완료.


   열심히 만들었는데... 구글이 야속하다. 왜이리 순위가 뒤로 밀리는지 모르겠다. 정말 열심히 많은 시간을 투자해서 만들었는데..... 평가도 좋은데...... 자꾸 순위가 뒤로 밀린다.. 아무리 봐도 나보다 못한 어플이 위에 있는데..... 뭐.... 내가 만든 어플이니 내가 남보다 낫다고 생각이 드는건가..... 휴휴!! 상위권으로 갈 수 있었으면 좋겠다. 여러분도 한번 다운로드 해서 사용 해보시고 피드백 주시면 노력해서 좋은 로또 어플이 되도록 하겠습니다.


앱주소 : https://play.google.com/store/apps/details?id=com.my.Lotto645















[안드로이드] 구글 머터리얼 디자인(Material Design) 관련


    구글이 머터리얼 디자인이란 디자인 가이드라인을 제시 함으로서 앱의 동작 방법이나 화면이 어느정도 일관성이 갖게 된거 같다. 아직 하위 버전에 대한 지원이 완벽하진 않은거 같지만... 뭐 앞으로 만들어지는 앱들은 이런 디자인으로 가지 않을까 싶은 생각이다. 구글의 가이드라인을 보면 저런것들을 어떻게 코드로 구현해야 하지 의문점이 많이 든다. 분명 가능하니 가이드라인을 제시 했을테니 말이다. 남의 앱을 보거나 예제를 보면 한층 빠르게 배울 수 있으므로 관련 사이트들을 링크 해놓고자 한다. 물론 미래의 나를 위해서... 또 이글을 보는 사람들에게 도움이 되기 위해... 라이브러리를 가져다 쓰는것도 빠른 개발 방법이지만 응용력을 기르기 위해선 이해도 중요하니.. 본인도 이해를 위해 노력하며 작업 해 볼까 한다. 여러분도 그러하길!! 


1. 링크! 링크! 링크!! 

  - 머터리얼 디자인 구글 공식 가이드 사이트

  - 달력 관련 디자인 01

  - 달력 관련 디자인 02

  - Expand and collapse animation 예제

  - Floating Action Bar(FAB) 관련 01

  - FAB 관련 02

  - FAB 관련 03

  - ObservableScrollView(스크룰시 액션바와 FAB 등의 연계 예제)

  - 스크룰시 애니메이션 관련

  - MATERIAL DESIGN, EXTENDED TOOLBAR AND SCROLLING 예제

  - How to hide/show Toolbar when list is scroling 예제

  - 머터리얼 관련 위젯의 사용 예제 모음

  - 머터리얼 관련 위젯의 사용 예제 모음 02( 굳굳! )

  - 머터리얼 디자인 관련 예제 모음( 굳굳!! )