지난 2차 기술세미나는 제가 최근에 관심을 가지고 있던 안드로이드(Android) 관련 내용이라 참석을 했었는데, 세미나 수준도 높고 저에게 많은 도움이 되었습니다.

세미나 주제가 자신에게 도움이 된다고 생각되시면 신청해서 참석해 보세요. 후회하지는 않을 것 입니다.

 










Posted by 산사랑

2010/09/01 19:33 2010/09/01 19:33
, , , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/263

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/263

Leave a comment
[로그인][오픈아이디란?]
오픈소스로 제공되는 JBoss jBPM에서 자동으로 Java Class의 Method를 실행하여 주는 <java> 단계을 정리해 보았습니다.

java

name="이름"
  • 이 단계의 이름, 분기(transition)시 사용 한다.
class="클래스명"
  • 실행할 Java 클래스 지정
  • class 대신 expr="#{변수}" 를 사용하여 실행할 Java 클래스를 지정할 수도 있다.
method="함수명"
  • Java 클래스에서 실행될 함수명(Method)을 지정 한다.
var="반환되는 객체명"
  • 반환되는 객체가 저장될 변수명을 정의 한다.
  • 다른 단계에서 "#{반환되는 객체명}" 으로 지정하여 사용할 수 있다.
g="x,y,width,height"
  • 이 단계를 그림으로 그릴 때 표시되는 위치
<arg>인수</arg>
  • Java Method에 인수로 전달하는 값을 정의
  • 문자열 : <string value="Hi, how are you?"/> -> String
  • 숫자 : <int value="25"/> -> Integer
  • 객체 : <object expr="#{processInfo}"/> -> Object 또는 해당 객체의 타입
<field name="state">변수값</field>
  • 함수에 전달되는 값이 아닌 Java 클래스에 선언된 변수에 전달되는 값을 정의 한다.
  • 변수값은 위 <arg>에 전달되는 값과 동일한 문법을 사용하여 정의 한다.
<transition to="다음 단계 이름"/>
  • Java 클래스의 함수를 실행한 후 분기할 다음 단계를 명시 한다.
  • JBoss jBPM의 java 실행 사례
   //--- processInfo는 Process를 처음 실행할 때 전달된 HashMap
   <java name="step_2_1"
         class="com.groupware.ApproveWorkflowManager" 
         method="documentMove" 
         var="answer"
   	  g="200,300,200,50" >
  	<arg><string value="Drafter document move"/></arg>
  	<arg><object expr="#{processInfo}"/></arg>
  		
  	<arg><object expr="#{processInfo.currentUserSeq}"/></arg>
  	<arg><object expr="#{processInfo.currentBox}"/></arg>
  	<arg><object expr="#{processInfo.currentUserSeq}"/></arg>
  	<arg><string value="Approve/Processing"/></arg>
       <transition to="step_2_2"/>
   </java>

   import com.groupware;
   public class ApproveWorkflowManager {
       public String documentMove(String stepInfo, 
               HashMap<String, Object> processInfo,
               String beforeUser, String beforeBox, 
               String afterUser, String afterBox) {
           processInfo.put("result", "ok");
           return "result";
       }
   }

*** 참고 문헌 ***

Posted by 산사랑

2010/08/27 19:07 2010/08/27 19:07
, , , , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/262

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/262

Leave a comment
[로그인][오픈아이디란?]

HWP 포맷 공개에 따른 저작권

한글과컴퓨터의 한컴 오피스 한글 문서 파일 구조(.hwp) 공개에 따라, 오픈소스 입장에서 저작권(라이선스)를 한번 살펴 보고자 합니다.

아래는 한글과컴퓨터에서 명시한 저작권을 참조하여 제가 해석을 달은 사항 입니다.

-------------------------------------------------------------------------------------------------------------
본 문서는 한글과컴퓨터의 한컴오피스 한글 문서 파일 구조(.hwp) 공개정책에 따라 제공되며, 본 문서를 열람하는 것은 공개정책 및 아래의 사항에 동의함을 의미합니다.
본 문서 및 문서에 포함된 모든 내용에 대한 저작권을 포함한 지적재산권 및 일체의 권리는 (주)한글과컴퓨터가 가지고 있습니다.

본 문서를 열람, 복사, 배포, 게재 및 사용하는 것을 자유롭게 할 수 있습니다. 그러나 (주)한글과컴퓨터의 사전 서면 동의 없이 문서의 내용을 일부 또는 전체를 수정, 변형하거나 일부 내용을 발췌하여 배포하거나 게재할 수 없으며, 본 문서의 완성된 형태로 배포 및 게재하여야 합니다.

본 문서를 배포 또는 게재할 시에는 반드시 저작권을 포함한 지적재산권 및 일체의 권리가 (주)한글과컴퓨터에 있음을 밝혀야 합니다. 본 문서를 배포 또는 게재 시 (주)한글과컴퓨터 홈페이지에서 다운로드 받아 사용하여야 합니다.

여기까지는 "한글 문서 파일 구조"를 명시한 문서에 대한 저작권이며, 아주 일반적인 사항으로 아무런 문제가 없습니다.
저작권법에서의 저작인격권

본 문서를 통해 이뤄진 2차적저작물(소프트웨어 포함)은 반드시 (주)한글과컴퓨터의 한컴오피스 한글문서 파일 구조(.hwp)공개정책에 따라 이뤄졌음을 저작물에 표시하여야 하며 표시는 외부에서 접근 가능해야 합니다.

여기서는 2차 저작물에 대해 한글과컴퓨터의 권한을 명시하고 있으며 일반적인 내용 입니다. 다만, 2차 저작물을 "한글 문서 파일 구조"를 명시한 문서에서 파생된 문서가 아닌 소프트웨어로까지 확대한 것은 약간 무리가 있습니다.
그렇지만 한글과컴퓨터의 저작권에 이렇게 명시되어 있으므로, 누가 승소를 하던 한글과컴퓨터가 소송을 걸 수 있는 여지가 있습니다. 제가 알고 있는 바로는 특허가 아닌 이상 문서에 기술되어 있는 내용을 보고 만든 소프트웨어를 2차 저작물이라고 할 수는 없습니다.
저작권법에서의 저작재산권

본 문서는 (주)한글과컴퓨터의 저작권, 상표권, 특허권등의 지적재산권을 포함하고 있을 수 있습니다. 본 문서는 이러한 지적재산권의 자유로운 사용을 허용하는 목적을 가지지 않으므로 해당 지적재산권에 대해 사용을 하고자 할 경우에는 반드시 사전에 (주)한글과컴퓨터에 문의하시기 바랍니다.

상표권(Trademark right)은 일반적인 내용이므로 한글과컴퓨터의 상표권을 침해하지 않는 이상 문제가 될 것은 없습니다.
저작권은??? 문서의 앞쪽에 저작권을 명시해 두고 있으면서 본 문서가 한글과컴퓨터의 저작권을 포함하고 있을 수 있다는 말은 뭔가요?
이 말을 그대로 해석해 보면 "다른 저작권을 가진 한글과컴퓨터의 문서"가 이 문서에 포함되어 있을 수 있다는 말로 사용자는 포함되어 있는 저작권을 다 확인하고 써야 한다는 말이 됩니다. (저작권에 대해서 잘 모르는 사람이 이 문서를 작성 했나 봅니다. 저작권을 아는 사람이라면 이 문서내에 포함되어 있는 다른 저작권을 이 문서의 저작권 아래에 명시를 했을 것 입니다. 아니면 분쟁의 여지를 남겨 두기 위해서 일부러 그랬던지.)
특허권은 아주 치명적이네요. 이 문서에 포함되어 있는 한글과컴퓨터가 가진 특허권을 가지고 소프트웨어를 개발하였을 경우, 특허권자와 이를 프로그램을 구현한 주체가 다른 "제3자 특허인 경우"에 해당 합니다.
제3자 특허의 경우 아래의 제약 조건이 있습니다.
특허권자가 무상(Royalty-Free) 조건의 특허 라이선스를 허용하지 않는다면 구현자는 이 프로그램을 GPL 조건으로 배포할 수 없다(GPL 제7조). 예를 들면 甲회사가 乙회사의 특허기술을 바탕으로 A라는 프로그램을 만들었을 경우, 乙회사가 그 특허를 모든 사람에게 무상으로 허용하지 않는다면, 甲회사가 라이선스를 무료로 받았다고 할지라도 A프로그램을 GPL 조건으로 배포할 수 없다. 나아가 GPL 3.0에서는 제3자인 특허권자가 이용자들을 차별하여 라이선스를 부여하는 것을 막기 위한 조항이 삽입 되었다. MPL은 제3자의 특허인 경우에도 일단 배포는 허용하되, 'LEGAL'이라는 이름의 파일을 추가하여 어떠한 특허가 문제되고 있는지, 어떤 사람이 문제나 이의를 제기하고 있는지에 대한 사항을 자세히 기록하도록 하고 있다.
결론적으로 GNU GPL 등과 같이 많이 사용되고 있는 오픈소스 라이선스로는 배포하지 못하고 특허를 같이 사용할 수 있는 오픈소스 라이선스를 채택하더라도 한글과컴퓨터가 언제든지 소송을 제기할 수 있습니다.
위 저작권의 문구대로 하면 한글과컴퓨터에서 사용을 허락해 주어야만 사용할 수 있습니다. 한글과컴퓨터에서 어디까지 사용을 허용해 줄 것인지에 대한 내용은 여기에는 하나도 명시되어 있지 않군요.
저작권, 상표권, 특허권

본 문서 및 문서의 내용의 사용으로 인하여 초래된 모든 결과에 대하여 책임지지 않으며 본 문서 및 문서 내용을 활용한 사용물이 (주)한글과컴퓨터에게 심각한 피해를 초래할 경우에는 (주)한글과컴퓨터는 사용을 제한할 수 있으며, 사용자는 (주)한글과컴퓨터의 피해 발생이 우려되는 경우 사전에 알려야 합니다.

문서의 사용으로 인한 결과에 책임을 지지 않는다는 말은 일반적인 내용 입니다.
그러나 한글과컴퓨터가 언제든지 사용을 제한할 수 있군요. 사용을 제한할 수 있는 조건인 "심각한 피해"라는 것이 한글과컴퓨터에서 주관적으로 판단할 수 있는 아주 애매한 말이라 문제가 됩니다.
-------------------------------------------------------------------------------------------------------------

한글과컴퓨터에서 공개한 문서를 참조하여 소프트웨어를 개발할 경우, 오픈소스로 공개하기에는 다음과 같은 고려 사항이 있습니다.
  1. 소프트웨어를 2차 저작물로 볼 수 있는가
  2. 추가로 포함된 저작권은 무엇인가?
  3. 이 문서에 포함된 특허는 무엇인가?
  4. 한글과컴퓨터가 사용을 제한하는 구체적인 조건은 무엇인가?
이상 오픈소스 관점에서 한글과컴퓨터가 공개한 문서의 저작권을 살펴 보았습니다. 결론적으로 현재로서는 이 문서를 가지고 만든 소프트웨어를 오픈소스화 할 수는 없습니다.

*** 참고 문헌 ***

Posted by 산사랑

2010/08/14 11:28 2010/08/14 11:28
, , , , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/260

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/260

Comments List

  1. 구차니 2010/08/16 14:42 # M/D Reply Permalink

    머 저번 간담회에 다녀 왔지만,
    명분을 위한 공개이지, 실질적인 공개라고 하기에는 무리가 많더라구요.

    차라리 포맷과 기본 라이브러리를 공개하는게 오히려 더
    일반 개발자들에게 더많은 이득이 되고 실효성이 있었을텐데.. 하는 아쉬움이 들어요. (물론 웹서비스 쪽에서는 내용만 읽고 정밀하게 도표를 그려낸다던가 할 필요는 없을지도 모르지만 - 페이지에 맞추어서 - 뷰어라던가 이런걸 만들려고 할때에는 너무 부족해 보이더라구요)

    1. pnuskgh 2010/08/18 08:32 # M/D Permalink

      그래도 누군가는 뷰어를 만들어너겠죠.
      그렇지만시간이 많이 필요할 듯.

      옹니아2를 쓸 때는 이렇게 글을 쓰는걸 상상도 못 했는데 개럭시는 가능하군요.

Leave a comment
[로그인][오픈아이디란?]
갤럭시S를 구매한 이후로 자질구레한 안드로이드용 앱을 만들어 사용하고 있다. 회사 직원의 주소록을 관리하는 것을 만들었는데, 안드로이드 주소록이 따로 있어서 검색 기능을 통합하려고 안드로이드의 주소록을 살펴 보았다.

사용법은 3개의 객체로 계층 구조화 되어 있다는 것을 제외하면 다른 ContentProvider를 사용하는 것과 동일 했다.

주소록 입출력

  • Android의 주소록 구조
  • android.provider.ContactsContract.Contacts : 최상위 주소록
  • android.provider.ContactsContract.RawContacts : 주소록의 출처별 주소록
  • android.provider.ContactsContract.Data : 주소록에 포함되어 있는 데이터 (예, 전화번호, 이메일 등)

contacts-2.png

  • 주소록 입출력 권한
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
  • Contacts 조회 (Android 2.2)
StringBuffer buf = null;
Cursor contacts = null;
long contactID = 0l;

buf = new StringBuffer();
// String sortOrder = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
// Cursor contactCursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
contacts = getContentResolver().query(Contacts.CONTENT_URI,
new String[] {
Contacts._ID, Contacts.CONTACT_PRESENCE,
Contacts.CONTACT_STATUS,
Contacts.CONTACT_STATUS_ICON, Contacts.CONTACT_STATUS_LABEL,
Contacts.CONTACT_STATUS_RES_PACKAGE,
Contacts.CONTACT_STATUS_TIMESTAMP, Contacts.CUSTOM_RINGTONE,
Contacts.DISPLAY_NAME,
Contacts.HAS_PHONE_NUMBER, Contacts.IN_VISIBLE_GROUP,
Contacts.LAST_TIME_CONTACTED,
Contacts.LOOKUP_KEY, Contacts.PHOTO_ID,
Contacts.SEND_TO_VOICEMAIL,
Contacts.STARRED, Contacts.TIMES_CONTACTED
},
null, null, null);

contacts.moveToFirst();
if (!contacts.isAfterLast()) {
do {
contactID = contacts.getLong(0);
buf.append("--- Contacts Lists ---\n");
for (int idx = 0;idx < contacts.getColumnCount();idx++) {
if (contacts.getString(idx) != null) {
buf.append(contacts.getColumnName(idx).toUpperCase() + ": "
+ contacts.getString(idx) + "\n");
}
}
buf.append("\n");
} while (contacts.moveToNext());
}
contacts.close();
return buf.toString();
  • RawContacts 조회 (Android 2.2)
StringBuffer buf = null;
Cursor rawContacts = null;
long rawContactID = 0l;

buf = new StringBuffer();
rawContacts = getContentResolver().query(RawContacts.CONTENT_URI,
new String[] {
RawContacts._ID, RawContacts.ACCOUNT_NAME,
RawContacts.ACCOUNT_TYPE,
RawContacts.AGGREGATION_MODE, RawContacts.CONTACT_ID,
RawContacts.CUSTOM_RINGTONE,
RawContacts.DELETED, RawContacts.DIRTY,
RawContacts.LAST_TIME_CONTACTED,
RawContacts.SEND_TO_VOICEMAIL, RawContacts.SOURCE_ID,
RawContacts.STARRED,
RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3,
RawContacts.SYNC4, RawContacts.TIMES_CONTACTED,
RawContacts.VERSION
},
RawContacts.CONTACT_ID + "=?",
new String[] {String.valueOf(contactID)}, null);

rawContacts.moveToFirst();
if (!rawContacts.isAfterLast()) {
do {
rawContactID = rawContacts.getLong(0);
buf.append("--- RawContacts Lists ---\n");
for (int pos = 0;pos < rawContacts.getColumnCount();pos++) {
if (rawContacts.getString(pos) != null) {
buf.append(rawContacts.getColumnName(pos).toUpperCase()
+ ": " + rawContacts.getString(pos) + "\n");
}
}
buf.append("\n");
} while (rawContacts.moveToNext());
}
rawContacts.close();
return buf.toString();
  • Data 조회 (Android 2.2)
StringBuffer buf = null;
Cursor contactData = null;

buf = new StringBuffer();
contactData = getContentResolver().query(Data.CONTENT_URI,
new String[] {
Data._ID, Data.MIMETYPE, Data.RAW_CONTACT_ID,
Data.IS_PRIMARY, Data.IS_SUPER_PRIMARY, Data.DATA_VERSION,
Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5
},
Data.RAW_CONTACT_ID + "=?",
new String[] {String.valueOf(rawContactID)}, null);

buf.append("--- Data Lists ---\n");
contactData.moveToFirst();
if (!contactData.isAfterLast()) {
do {
for (int idx = 0;idx < contactData.getColumnCount();idx++) {
if (contactData.getString(idx) != null) {
buf.append(contactData.getColumnName(idx).toUpperCase()
+ ": " + contactData.getString(idx) + "\n");
}
}
buf.append("\n");
} while (contactData.moveToNext());
}
contactData.close();
return buf.toString();
  • 전화번호 가져오기
import ContactsContract.CommonDataKinds.Phone;
Cursor PhoneNumberCursor =
getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
  • 연락처 등록
ContentValues values = new ContentValues();
values.put(RawContacts.ACCOUNT_TYPE, "basic");
values.put(RawContacts.ACCOUNT_NAME, "test");
Uri rawContactUri =
getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
  • 연락처 수정
int resolver.update(Uri uri, ContentValues values, String where, String selectionArgs[])
  • 연락처 삭제
int resolver.delete(Uri url, String where, String selectionArgs[])
  • 자신의 번호를 조회
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

TelephonyManager mTelephonyMgr =
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myNumber = mTelephonyMgr.getLine1Number();
  • 참고 문헌


Posted by 산사랑

2010/08/06 08:29 2010/08/06 08:29
, , , , , , , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/259

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/259

Comments List

  1. 갱즈 2010/08/08 13:00 # M/D Reply Permalink

    안녕하세요 ㅋㅋㅋ 방명록에 남겼는데 못보셨나봅니다..

    그래서 여기다가 또남겨요 ㅋ 건강하세요 ㅎㅎ

    1. 산사랑 2010/08/09 10:05 # M/D Permalink

      요즘은 주변에 아픈 사람이 많아 져서 더욱 더 건강에 신경이 쓰이는 군요.

      님도 건강하세요.

Leave a comment
[로그인][오픈아이디란?]
2010년 7월은 조용한 한달 이었다. 공개SW 역량프라자가 본격적으로 2010년도 활동을 시작하면서 이와 관련된 행사가 열렸었고 문화체육관광부에서 오픈소스 라이선스와 관련되어 작년부터 준비하던 서비스가 공개 되었다.

이번달은 개개인의 오픈소스에 대한 관심 사항이 많이 올라 왔다. 오픈소스의 활동이 재미 있는지, 자신의 소프트웨어를 오픈소스를 전환하려면 어떻게 하는지 등의 글이 있었다.

2010년 7월

  1. [오픈소스///전환/2010.7.30] : 오픈소스로 어떻게 전환할 수 있을까요?
  2. [오픈소스/레드블럭/킴스큐/CMS/2010.7.27] : '웹플랫폼 생태계 구축'… 한 오픈소스 개발자의 대담한 도전
  3. [오픈소스/공개SW 역량프라자//자료/2010.7.26] : 제2회 공개SW역량프라자 정기기술세미나(7월21일) 발표자료
  4. [오픈소스/공개SW 역량프라자//개발 공간/2010.7.23] : 공개SW 개발공간 맘껏 쓰세요
  5. [오픈소스//Hudson/빌드 자동화/2010.7.22] : Hudson을 이용한 빌드 자동화
  6. [오픈소스/네이버/큐브리드/MySQL/2010.7.22] : 큐브리드, 한경닷컴에 오픈소스DB 공급
  7. [오픈소스///3S/2010.7.20] : 모바일, 데스크톱 혹은 클라우드? 오픈 소스의 미래는 어디에 놓여있는가?
  8. [오픈소스/문화체육관광부//캠페인/2010.7.19] : 오픈소스SW 저작권 인식제고 캠페인 진행
  9. [오픈소스/공개SW역량프라자//기술세미나/2010.7.15] : 공개SW 역량프라자 7월 정기 기술 세미나 안내(2010.07.21)
  10. [오픈소스///도입,고려사항/2010.7.13] : 공개SW - 오픈소스 도입시 고려사항
  11. [오픈소스///라이선스,BSD/2010.7.12] : BSD 라이선스가 걸려있는 오픈소스는 어떤식으로 사용해야 하나요?
  12. [오픈소스//Bouncy Castle/암호화/2010.7.9] : 암호화 오픈소스 바운스 캐슬에 대해서 아시는분
  13. [오픈소스///라이선스/2010.7.8] : DT발언대: 오픈소스 공공의 적
  14. [오픈소스/IBM//EU,클라우드,플랫폼/2010.7.8] : IBM-EU, SMB용 오픈소스 클라우드 플랫폼 개발
  15. [오픈소스///철학/2010.7.8] : 오 픈소스 활동이 재미있으세요?
  16. [오픈소스///PCB/2010.7.8] : Kicad - open source PCB / circuit program
  17. [오픈소스///그래픽,취업/2010.7.7] : 오픈소스 그래픽작업으로 취업..그리고 관련회사는?
  18. [오픈소스///하우스/2010.7.6] : Open Source House Competition 결과 발표
  19. [오픈소스///전망/2010.7.4] : 오픈 소스 소프트웨어 전망
*** 참고 문헌 ***

Posted by 산사랑

2010/08/04 08:35 2010/08/04 08:35
, , , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/258

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/258

Comments List

  1. 구차니 2010/08/05 13:52 # M/D Reply Permalink

    물론 오픈소스가 좋긴하지만, 기업에서 쓰기에는 GPL이 무섭긴하죠 ㅎ
    기업에서 마음 편히 쓰려면 GPL보다는 BSD License가 좋은거 같아요

    1. 산사랑 2010/08/06 08:16 # M/D Permalink

      ㅎㅎ, 그렇죠.

      그래서 저희도 회사 내부적으로 사용하는 것은 GPL을
      외부로 판매할 것은 GPL이 아닌 라이선스를 가진 오픈소스를 가져다 사용합니다.

      예를 들면, Sugar CRM 이 좋지만 vTiger CRM을 가져다 쓰는 것 처럼 말 입니다.

      구차니님도 이제는 오픈소스 도사가 되신듯 하군요. ㅋㅋ

Leave a comment
[로그인][오픈아이디란?]

jQuery Selector

예전에 JavaScript를 어느 정도 한 후에 Prototype, Rico 등을 봤었는데 어제는 jQuery를 봤다. 내용을 살펴보니 Prototype과 거의 대동소이 했다. 다만, Selector에서 다양한 형태를 지원하고 있어서 눈길을 끌었다.

아래는 jQuery에서 지원하고 있는 Selector 이다. jQuery를 살펴 보다보니 예전에 봤던 HTML, CSS, JavaScript, HTML의 데이터 모델, XML, XPath 등이 생각이 났다. XPath 정의 Selector는 예전에 봤던 XPath가 잘 기억이 나지 않아 생각나는 것만 일부 정리를 했다. 대신에 HTML의 데이터 모델을 뒤에 추가 한다.

CSS3 Selectors

Selector Selector 설명
*

모든 Element

E
  • Element 이름으로 지정

예) element: <element>~</element>

.class
  • Class 명으로 Element 지정, E.class 또는 E#id.class 로도 사용 가능

예) .className: <element class="className">~</element>

#id
  • ID로 Element 지정, E#id 로 사용 가능

예) #elementID: <element id="elementID">~</element>

[~]
Attribute로 선택
  • E[attr] : attribute를 가진 모든 Element
  • E[attr=val] : attribute가 val인 모든 Element
  • E[attr^=val] : attribute가 val로 시작하는 모든 Element
  • E[attr$=val] : attribute가 val로 끝나는 모든 Element
  • E[attr~=val] : attribute가 val이 아닌 모든 Element
  • E[attr*=val] : attribute가 val을 포함하는 모든 Element
  • E[attr|=val] : an E element whose "attr" attribute has a hyphen-separated list of values beginning (from the left) with "val"
E ~ F
Element의 관계로 선택
  • E F : E의 모든 자식 Element 중 이름이 F인 Element
  • E > F : E의 바로 아래 Element 중 이름이 F인 Element
  • E + F : E의 뒤에 나오는 형제 Element 중, E바로 뒤에 나오는 이름이 F인 Element
  • E ~ F : E의 뒤에 나오는 형제 Element 중, 이름이 F인 Element
  • E:has(F) : F인 자손을 가지는 E Element
E:~
위치로 선택
  • E:first : 첫번째 Element
  • E:last : 마지막 Element
  • E:before : 이전 Element
  • E:after : 다음 Element
  • E:even : 짝수 Element
  • E:odd : 홀수 Element
  • E:eq(n) : n번째 Element
  • E:gt(n) : n번째 이후의 Element
  • E:lt(n) : n번째 이전의 Element
  • E:root : Root Element
  • E:not(s) : s와 일치하지 않는 E Element, 예) input:not(:checkbox)

  • E:empty : 자식이 없는 모든 E Element
  • E:nth-child(n) : n번째 자식 Element인 모든 E Element
  • E:nth-last-child(n) : 끝에서 n번째 자식 Element인 모든 E Element
  • E:only-child : 형제가 없는 자식 Element인 모든 E Element
  • E:first-child : 첫번째 자식 Element인 모든 E Element
  • E:last-child : 마지막 자식 Element인 모든 E Element
  • E:nth-child(even) : 짝수 자식 Element인 모든 E Element
  • E:nth-child(odd) : 홀수 자식 Element인 모든 E Element
  • E:nth-child(Xn+Y) : 예) a:nth-child(3n+2) : n을 0부터 대입하여 이에 해당하는 자식 Element인 모든 E Element

  • E:nth-of-type(n) : an E element, the n-th sibling of its type
  • E:nth-last-of-type(n) :
  • E:first-of-type :
  • E:last-of-type :
  • E:only-of-type :
E:~
링크 관계로 선택
  • E:link : 사용자가 방문하지 않은 링크를 가진 Element
  • E:visited : 사용자가 방문한 링크를 가진 Element
  • E:active : 활동 중인 링크 Element
  • E:hover : Mouse가 지나가는 Element
  • E:focus : Focus를 가진 Element
  • E:target : target을 가진 Element
E::~
확장 선택
  • E::first-line : E Element의 첫번째 라인
  • E::first-letter : E Element의 첫번째 문자
  • E::before : E Element 이전에 추가된 content
  • E::after : E Element 이후에 추가된 content
기타
  • E:enabled : 활성화된 E Element
  • E:disabled : 비활성화된 E Element
  • E:checked : 여러 항목중에서 선택된 Element
  • E:lang(ko) : 언어가 ko인 Element

jQuery 정의 Selector

Selector Selector 설명
input type에 따라 선택
  •  :checkbox : input element 중 type이 checkbox인 element
  •  :text : input element 중 type이 textx인 element
  •  :file : input element 중 type이 file인 element
  •  :password : input element 중 type이 passwordx인 element
  •  :readio : input element 중 type이 readio인 element
  •  :image: input element 중 type이 image인 element
  •  :button : input element 중 type이 submit, reset, button인 element와 button element

  •  :submit : input, button element 중 type이 submitt인 element
  •  :reset : input, button element 중 type이 reset인 element

  •  :input : input, select, textarea, button element
활성, 선택 여부로 선택
  •  :enabled : 활성화된 element
  •  :disabled : 비활성화된 element
  •  :visible : 눈에 보이는 Element
  •  :hidden : 숨겨진 element

  •  :selected : 선택된 element
  •  :checked : 선택된 체크박스와 라디오 버튼
:animated
  • 현재 애니메이션이 적용된 element
:contains(val)
  • val을 포함하는 element
:header
  • <h1>부터 <h6>까지
:not(filter)
  • filter에 해당하는 element를 제외한 element
:parent
  • 자식을 가지는 element

XPath 정의 Selector

Selector Selector 설명
E/F
  • E element 바로 아래의 F element
E//F
  • E element 아래의 F element
E[@F]
  • 최소 하나의 F element를 포함하는 E element
E/*
  • E element 아래의 모든 element
E/..
  • E element의 부모 element
E[@attr=val]
  • E element중 attr attribute의 값이 val인 element


HTML 데이터 모델

InnerHTML Model

  • this.innerHTML = str;
  • this.innerText = str;
  • this.outerHTML = str;
  • this.outerText = str;
  • this.insertAdjacentHTML(,);
  • this.insertAdjacentHTML("beforebegin", str);
  • this.insertAdjacentHTML("afterbegin", str);
  • this.insertAdjacentHTML("beforeend", str);
  • this.insertAdjacentHTML("afterend", str);
  • insertAdjacentText(,);
  • this.insertAdjacentText("beforebegin", str);
  • this.insertAdjacentText("afterbegin", str);
  • this.insertAdjacentText("beforeend", str);
  • this.insertAdjacentText("afterend", str);

Element Model

  • this.parentElement;
  • this.children;
  • this.contains(node);
  • bodyElement = document.getChildNodes().item(0).getChildNodes().item(1);
  • bodyElement = document.getFirstChild().getFirstChild().getNextSibling();
  • typeInt = bodyElement.getNodeType()
  • elementName = bodyElement.getNodeName();
  • elementContent = bodyElement.getFirstChild().getNodeValue();
  • var td = xCreateElement("td");
  • linkText = document.createTextNode("edit");
  • tr.appendChild(td);
  • oldNode = theDiv.firstChild.nextSibling.nextSibling;
  • theDiv.removeChild(oldNode);
  • newNode = document.createTextNode(newText);
  • theDiv.appendChild(newNode);
  • theDiv.replaceChild(newNode, oldNode);
  • theDiv.firstChild.nextSibling.nextSibling.nodeValue=newText;

Document All Model

  • window.document.all["idVal"]
  • window.document.all.idVal
  • var tagH2 = window.document.all.tags("H2");
tagH2[0, 1, 2 . . .]
  • this.getElementsByTagName("*");
  • formElement = window.document.getElementById("noteForm");


Posted by 산사랑

2010/08/03 08:27 2010/08/03 08:27
, , , , , , , , , , , , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/257

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/257

Leave a comment
[로그인][오픈아이디란?]
갤럭시S에서 Android 앱을 작성할 때 제일 먼저하는 것은 화면 디자인일 것이다. 화면 디자인시에 갤럭시S의 화면 크기를 알고 있으면 도움이 많이 된다.

아래 코드는 갤럭시S에서 화면의 크기를 구하는 방법 이다.

갤럭시S 화면 크기

  • Activity에서 화면 크기 구하는 방법
 StringBuffer buf = null;
 WindowManager wm = null;
 Display display = null;
 DisplayMetrics metrics = null;
    	
 wm = getWindowManager();
 display = wm.getDefaultDisplay();
 metrics = new DisplayMetrics();
 display.getMetrics(metrics);
    	
 buf = new StringBuffer();
 buf.append("Window display id: " + display.getDisplayId() + "\n");
 buf.append("Window orientation: " + display.getOrientation() + "\n");
 buf.append("Window width: " + display.getWidth() + "\n");
 buf.append("Window height: " + display.getHeight() + "\n");
 buf.append("Window pixel format: " + display.getPixelFormat() + "\n");
 buf.append("Window refresh rate: " + display.getRefreshRate() + "\n");
 buf.append("Window width pixels: " + metrics.widthPixels + "\n");
 buf.append("Window height pixels: " + metrics.heightPixels + "\n");
 testMsg.setText(buf.toString());
  • 갤럭시S의 화면 크기
  • 세로 화면 크기
Window display id: 0
Window orientation: 0
Window width: 320
Window height: 533
Window pixel format: 5
Window refresh rate: 68.0
Window width pixels: 320
Window height pixels: 533
  • 가로 화면 크기
Window display id: 0
Window orientation: 1
Window width: 533
Window height: 320
Window pixel format: 5
Window refresh rate: 68.0
Window width pixels: 533
Window height pixels: 320

Posted by 산사랑

2010/08/02 18:20 2010/08/02 18:20
, , , , , , , , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/256

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/256

Comments List

  1. 구차니 2010/08/03 13:35 # M/D Reply Permalink

    orientation으로 방향을 얻어내면 되겠군요!

    1. 산사랑 2010/08/04 08:38 # M/D Permalink

      헉, 역시 ...

      제가 구차니즘에 빠져 설몀을 달지 않았는데
      바로 캐치해 내시는 군요.

Leave a comment
[로그인][오픈아이디란?]
  • Table 목록 가져오기
SELECT table_name, table_rows, avg_row_length, table_collation 
  FROM information_schema.`TABLES` T
where table_schema = '테이블명';
  • Table 정보 가져오기
SELECT column_name, column_default, is_nullable, data_type, character_maximum_length,
      numeric_precision, numeric_scale, collation_name
 FROM information_schema.`COLUMNS` C
where table_schema = '스키마명'
  and table_name = '테이블명'
order by ordinal_position;

Posted by 산사랑

2010/07/27 19:57 2010/07/27 19:57
, , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/255

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/255

Comments List

  1. 구차니 2010/07/27 21:58 # M/D Reply Permalink

    아.. 저는 mysql 사용자 관리에서 부터 포기에요 ㅠ.ㅠ
    강좌를 해주세요! ㅎ

    1. 산사랑 2010/07/28 08:08 # M/D Permalink

      ㅎㅎ

      구차니님은 더 어려운 것도 하시던데
      너무 엄살이 심하시군요.

Leave a comment
[로그인][오픈아이디란?]
안드로이드용 앱을 작성할 때 하나의 Activity와 다른 Activity간 소통 정보를 교환하는 방법은 여러가지가 있다. 그 중 한가지 방법은 "Intent의 Extras (Bundle)"를 이용하는 것이다.

여기서는 Extras에 Java 클래스를 넣어 정보 교환을 해 보자.
음, 점심시간에 잠깐 하려고 했더니 누가 와서 업무 관련 문의를 해서 점심 시간을 오버 했다.  아래 정리도 좀 부실해 졌군.

*정보를 교환할 클래스는 반드시 Serializable 해야 한다.
public class Contact implements Serializable {
}

*정보 전달
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;

 Intent intent = new Intent(getApplicationContext(), ContactEditActivity.class);
     try {
bos = new ByteArrayOutputStream(1024 * 100);
oos = new ObjectOutputStream(bos);
oos.writeObject(contact);
oos.close();
} catch (IOException e) {
e.printStackTrace();
return;
}
     intent.putExtra("contact", bos.toByteArray());
     startActivity(intent);

*정보 수신
       Contact contact = null;
        byte[] contactStream = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;

        Intent intent = getIntent();
        contactStream = intent.getExtras().getByteArray("contact");
        
        try {
bis = new ByteArrayInputStream(contactStream);
ois = new ObjectInputStream(bis);
contact = (Contact) ois.readObject();
ois.close();
} catch (StreamCorruptedException e) {
e.printStackTrace();
return;
    }

*** 참고 문헌 ***

Posted by 산사랑

2010/07/21 13:13 2010/07/21 13:13
, , , , ,
Response
No Trackback , No Comment
RSS :
http://www.jopenbusiness.com/tc/oss/rss/response/254

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/254

Leave a comment
[로그인][오픈아이디란?]
문화체육관광부와 한국저작권 위원회에서 2010년 7월 19일부터 2010년 8월 27일까지 오픈소스SW 저작권 인식제고를 위한 캠페인을 진행 한다.






Posted by 산사랑

2010/07/21 12:48 2010/07/21 12:48

Trackback URL : http://www.jopenbusiness.com/tc/oss/trackback/253

Leave a comment
[로그인][오픈아이디란?]
« Previous : 1 : 2 : 3 : 4 : 5 : ... 19 : Next »

블로그 이미지

개인적인 글쓰기와 오픈소스 비즈니스 컨설팅 관련 글을 정리합니다. consult (골뱅이) jopenbusiness.com

- 산사랑

Archives

78명이 RSS를 구독하고 있습니다.

Site Stats

Total hits:
142401
Today:
183
Yesterday:
187

*** 방문자 통계 ***
0827 : (248)
0828 : (196)
0829 : (196)
0830 : (210)
0831 : (207)
0901 : (197)
0902 : (187)
0903 : (183)
7일간 총 방문자수 : 1441