2013년 3월 29일 금요일

자바가 포인터가 없다고?

03-05 01:04:42.066: A/mydd(31545): java.lang.NullPointerException

누가 그랬니...

이미 예전 포스트에서 자바는 포인터의 언어라고 말한...

그 동안 고생했다

의류수거함 다 차서 전화해서 좀 가져가라고 함. 재대로 전달은 되는건지....

2013년 3월 21일 목요일

오원춘 사건.

http://blog.donga.com/sjdhksk/archives/22343

블로그 내용을 보니 인육이 목적이 맞네.

인육 목적이 아닐 수가 없다. 

그러나 법의 힘을 시전하는 판사는 더 심하다.

시체를 찾을 수 없어도 명백한 증거가 있다면 사형을 시켜 마땅한게

조각나서 봉다리에 들어간 시체가 자기 가족이라고 해도 무기징역을

줄 수 있을까?

http://blog.daum.net/loveuniverser/200

인육 시장도 확실.

정황상 인육 목적이 확실하고.

그게 아니더라도 사형을 줘야지 ㅡㅡ;

http://www.dailian.co.kr/news/news_view.htm?id=311065

그냥...

판사 얼굴이나 이름 공개하자.


판사 아는 측근이나 그 누구라도.



공개했을 때 비로소 정의가 실현되는 것 아닌가?

판사 정보를 공개 한다면 사형을 줄 것인가? 무기징역을 줄 것인가?

포청천은 왜 TV 나오는데

공명 정대 하니까 나올 수 있는 것 아니냐.

포청천 같은 판사가 실재로 존재한다면 자신이 내린 판결이 알려지는데

이의를 달까?

판사 고생 한다. 안다.

그런데 다른 사람들은 노나?



내 피같은 세금 ㅠㅠ

오원춘 처리하고 그 놈 밥 먹일 돈으로 판사 월급이나 더 올려줘라.

무기징역이라고 된 극악 살인범(성폭행 살인, 유아 살인 등) 

사형 판결 1인당 월급 30 올려줘라.(범죄자 밥값, 시설 유지비등등 하면 30도 적다)

아무리 그래도 사형 내리는 건 쉬운 일은 아닐테니까.


이렇게 넋두리라도 하면

유가족에게 도움이라도 되런가 ㅠㅠ 슬프다 정말. 애지중지 키운 딸일텐데.

집에서 걸어서 5~10분 정도 거리에 있다.

수원 동네 살인은 잊혀질만 하면 나온다.

오원춘, 오원춘사형, 오원춘사건, 오원춘인육조달, 수원토막살해사건, 오원춘살인사건, 수원토막살해, 수원여성납치살인


2013년 3월 18일 월요일

http://blog.naver.com/PostView.nhn?blogId=taeyeung2&logNo=100115885879

Ctrl + w + w -> 분할된 화면 이동 
 
Ctrl + w + = -> 분할된 화면의 크기가 동일하도록 조정 
 
] + c -> 차이점이 있는 부분으로 이동 (Down) 
 
[ + c -> 차이점이 있는 부분으로 이동 (Up) 
 
d + o -> 현재 커서가 위치한 창 쪽으로 반대 창 쪽의 내용을 적용 시키기 
 
d + p -> 현재 커서가 위치한 창 쪽의 내용을 반대 창 쪽으로 적용 시키기 
 
z + o (or space) -> 접혀 있는 부분 열기 
 
z + c -> 차이점 없는 부분 접기 
 
:diffupdate -> 문서 간의 차이점을 다시 비교하도록 하는 명령 (한 쪽 창의 내용을 edit하다 보면 문서 간의 차이점을 나타내는 색깔이 없어지기도 함) 

2013년 3월 17일 일요일

진정한 대자

진정한 배바지

하품

으아함

씨익

괜찮아

다 잘될거야.
미숙아로 태어나 벌싸 백일 지났다

엄홍길 대장과 함께

부산역

얼굴이 자꾸 변하넹

ㅋㅋㅋㅋ

FaceDetector.Face 안면 인식~

http://developer.android.com/reference/android/media/FaceDetector.Face.html



FaceDetector.Face


java.lang.Object
   ↳android.media.FaceDetector.Face //참조 API

2013년 3월 14일 목요일

양학선

혹시나
지금은 아니지만
양학선은 방황해도 괜찮다.

방황하다가 정신차려 체조에 재기 하기 힘들더라도 괜찮다.

그때는 여전히 지금처럼 효자의 모습인지 아닌지가 더 중요해질테니까.

그래도 방황말고

한번 더 부모님을 위한 멋진 모습 보여주길

2013년 3월 13일 수요일

linux security concerned

Grsecurity Home
http://www.grsecurity.net/

Grsecurity ACL Documentation
http://www.grsecurity.net/gracldoc.htm

Grsecurity Online Document
http://online.securityfocus.com/infocus/1551

Doit ajou univ
http://doit.ajou.ac.kr/~kagi/res/?p=trusted_os

SE Linux (Security-Enhanced Linux)
http://www.nsa.gov/selinux/index.html

LIDS (Linux Intrusion Detection System)
http://www.lids.org

Flask (Flux Advanced Security Kernel)
http://www.cs.utah.edu/flux/fluke/html/flask.html

Medusa DS9 Security System
http://medusa.fornax.sk/

VXE (Virtual eXecuting Environment)
http://www.intes.odessa.ua/vxe/index.html

Openwall Project
http://www.openwall.com/

RSBAC for Linux
http://www.rsbac.de/

SE-Darwin
http://www.stosdarwin.org/

TrustedBSD Project
http://www.trustedbsd.org/

Immunix
http://www.immunix.org

SELinux외에 보안



Yes, SELinux can be used with GRSecurity and/or PaX with no problems; however, it is suggested that GRACL should not be used, since it would be redundant to SELinux's access control.

GRSecurity라는게 있다.

http://en.wikibooks.org/wiki/Grsecurity


위키에 자세한 설명이 있다.

그리고 PaX라는 모듈을 포함한다. Pax는 실행중인 메모리 영역을 non-writable하게 만들어서 injection이나 overwriting을 방어한다.

GRSecurity는 SELinux에서 지원하는 RBAC도 지원한다.

그런데 어떻게 처음 찾은 구글링에서는 공존할 수 있다고 한 것인지 :)

하긴 SELinux는 type을 더 많이 쓰니까 같이 써도 될 것 같긴하다.

2013년 3월 12일 화요일

android Notificiation inboxstyle addline

context().getString(R.string.denial_msg)
.length();

Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
@SuppressWarnings("deprecation")
int textWidth = display.getWidth() / TextSize;

String[] events = new String[textWidth];// Sets a title for the Inbox style
for (int i = 0; i < textWidth; i++) {
if((float)(i+1)*textWidth > (float)(display.getWidth() / TextSize;
events[i] = context().getString(R.string.msg).substring(i*textWidth, (i+1)*textWidth);
else
events[i] = context().getString(R.string.msg).substring(i*textWidth);
inboxStyle.addLine(events[i]);
}

화면 크기에 맞게 텍스트 나누어서 뿌려주는 걸 만들어 봄. error군.


void notifykndroidlinaialNotification() {
Intent intent = new Intent("com.apple.app.linaial.count.reset");
PendingIntent pi = PendingIntent.getBroadcast(
kContextManager.getkContext(), 1, intent,
PendingIntent.FLAG_ONE_SHOT);

NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();

inboxStyle.setBigContentTitle(kContextManager.getkContext()
.getString(R.string.kndroid));

int textLength = kContextManager.getkContext().getString(R.string.linaial_msg)
.length();

Display display = ((WindowManager) kContextManager
.getkContext().getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();

int lineLength = 38;

int lines = textLength / lineLength + 1;

String[] events = new String[lines];

android.os.Debug.waitForDebugger();

try {
for (int i = 0; i <=lines ; i++) {
if(i*lineLength+lineLength < textLength)
events[i] = kContextManager.getkContext()
.getString(R.string.linaial_msg)
.substring(i*lineLength, i*lineLength + lineLength);
else
events[i] = kContextManager.getkContext()
.getString(R.string.linaial_msg)
.substring(i*lineLength);
inboxStyle.addLine(events[i]);
}
} catch (Exception e) {
e.printStackTrace();
}

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
kContextManager.getkContext())
.setSmallIcon(android.R.drawable.btn_star)
.setContentTitle(
kContextManager.getkContext().getString(
R.string.kndroid))
.setContentText(
kContextManager.getkContext().getString(
R.string.linaial_msg))
.setAutoCancel(true)
.setNumber(0)
.setContentIntent(pi)
.setStyle(inboxStyle)
.setLights(0, 0, 0)
.setTicker(
kContextManager.getkContext().getString(
R.string.linaial_msg))
.setUsesChronometer(true);

mBuilder.setStyle(inboxStyle);

notificationManager.notify((int) 9999, mBuilder.build());
}

짜다보니 이런코드

변수도 좀 깔끔하게 빼주고 해야 하는데

동작만 되면 okay... 이젠... 이렇게 변하는구나.


2013년 3월 8일 금요일

http://shineyourlight-shineyourlight.blogspot.kr/2010/05/fw_1115.html



대한민국을 구한 위인, 우장춘 박사/고향의 노래
                                                                              
                                우장춘.jpg

고향의 노래(눈).jpg


      고향의 노래 / 이수인 곡, 연주곡   
            
미려지~~~~~~~~줄끈.gif

 
우장춘 박사. 


우장춘 박사가 왜 아직도 "씨없는 수박 맹든 사람"으로만 알려져 있는지 

도대체 이해할 수가 없다. 이것도 이승만의 저주인건가. 

(게다가 씨없는 수박은 기하라 히토시라는 이름의 일본인 박사가 처음 
그걸 우 박사가 한국에 들고 온거다. 뭔 넘의 "씨없는 수박 박사"...)

짧게 요약하자면, 

우장춘 박사는 일제와 전쟁이 말아먹은 불모지 쑥대밭 한반도를 먹고 
살만한 땅으로 바꿔 놓은 구국의 위인. 

이 분은  출생부터가  기구하셨다. 


1898년 생인데, 아버지가  친일부대의  대대장으로  명성황후  시해에 
가담한  역적  우범선이었다. 


아관파천으로 전세 역전,  일본으로  망명한 '친일파'  우범선, 일본인
 사카이 나카와  결혼해  2남을  생산하는데  그중 장 남이 우장춘이었다. 


 

우장춘(가운데) 가족 사진. 

 

아버지 우범선(왼쪽)의  죽음으로  이 가족은  더 이상  비참할 수 없는
 지경으로  빠진다 

조국을 배신한 역적의 최후는 비참했다. 우범선의 증언에 따르면 억울한 면도 있다는데 뭐 어쨌든. 우범선은 우장춘의 나이 5살에 대한제국이 보낸 자객에 살해된다. 

이때부터 우장춘 가족은 그야말로 떠돌이 집시만도 못한 최악의 삶을 살게 된다. 

조선에선 배신자 역적의 가족, 일본에선 이용가치 없는 쓰레기 튀기 가족으로 전락, 

과부가 된 장춘의 어머니는 극심한 경제적 비곤에 시달려, 우장춘을 고아원에 맡겨 버린다. 그리고, 무슨 동화책 속의 주인공마냥 조선인 우장춘은 고아원생들의 무지막지한 이지매 공격에 시달린다. 

일반적으로 어린 시절 가난하고 힘들고 폭력에 시달리다 크면 나중에 일탈행위를 하기 마련인데 우장춘은 그 반대였다. 그는 '기어코 훌륭한 사람이 되서 너희들에게 복수하겠다'는 생각을 했다고. 

뭐 어쨌든, 장춘의 어머니도 훌륭한 여인었던 모양. 기어코 돈을 벌어 장춘을 집으로 데려와 대학까지 보낸다. 것도 그냥 대학이 아니라 동경제국대학을. 명문대 간건 장춘이 대단해서였지만 아무튼. 


일본 제국주의과 우장춘의 복수심

도쿄제국대학 농학실과을 졸업한 장춘, 일본 농림성에 취업해 혁혁한 업적을 쌓으며 승승장구한다. 근데 1937년 어느날 갑자기 해임. 

왜? 일본 이름을 쓰지 않았다는 이유로. 

장춘이 일본에서 살아남는 길은 일본인이 되서 일본 이름을 쓰는 것 밖에 없었다. 실제로 그는 결혼하려고 일본인의 양자가 돼 "스나가 나가하루(須永長春)"라는 일본 이름을 얻었다. 근데 정작 자신의 업적을 남기는 논문과  

공문 기록에는 고집스럽게 자신의 한국 성인 "우"를 집어 넣었다.

우장춘 선생님 대학 시절 


우장춘에게 일본은 혹독한 굶주림과 차별과 폭력의 나라였다. 일본에서 이민자가 얻을 수 없는 엄청 높은 지위를 얻긴 했으나 그건 순전히 장춘이 혼자 
잘나서 그렇게 된 거고. 자신의 가족을 그토록 짓밟았던 제국주의에  미쳐 
날뛰는 나라, 일본은 우장춘에게  영원히  함께 하지 못할 적국일  뿐이었다. 

그래서 그는 조선인이라는 정체성에 매달렸다. 괴롭게도 조선은 우장춘을

 역적의 아들로  낙인 찍었으나,  여전히 조선은 그의 뿌리이자 (자신처럼) 
 일본에게 짓밟힌  약자였다. 


우장춘의 귀환

해임 후 지방의 농장장으로  재취업, 연구 활동에 몰두하던  우장춘은 

여생을 그냥 그렇게 행복하게  보낼 수 있었다. 육종학계
 최고 권위자라는 명예를 간직한 채
 일본  이민자 역사에  빛나는 태양으로 남을 수 있었다. 


그러나, 우장춘에겐 운명이 정해준 사명이 있었던 모양이었다. 
일제로부터  해방된 조선, 
아니    대한민국이 그를  애타게  찾기 시작한 거다. 

해방 후 대한민국은 1947년부터 농업의 근대화를 위해 일본에서 이름을 

날리고 있던 실력자 우장춘을, "같은 민족"이라는 미끼로, 영입하고자 했다. 

당시 한국은  미리 한국 농업 과학연구소를 만들어 놓고  소장 자리를 

우장춘을 위해 공석으로 놓아 둘 정도로, 우장춘의 가족에게 "이적료"로
 1백만엔을 보낼 정도로 열성이었다. 당시 1백만엔이면 '남편이 죽었어요 
10억을 받았어요' 수준의  엄청난 돈. 

우장춘은  이미  골수 깊은   민족주의자였는지도 몰랐다.  난  조선에서

 죄인이겠지라는  생각만 하고 있었는데 조선이  먼저 "어서오쎄요"라고 
걸보고  무척  감격했던게  분명했다. 
그는 가족을 위해 쓰라고 준 돈 1백만엔을 탈탈 털어 한국에 심을 종자를 
사는데 사 써 버렸다.   그리고  당시(1950년) 한국 전쟁이  한참이었던 
부산에 와서  그 나이에  군복무까지  했다.  당시  높으신  양반들은 
군면제시켜  주려고  했는데  우장춘은  싫다고  했단다.  허허... 


구원자, 우장춘 
암튼, 공석으로 남겨뒀던 한국 농업 과학연구소 소장으로 취임한 우장춘. 

근데 소장이면 뭐하니. 전쟁으로 쑥대밭된  나라엔  아무것도 없었다.  

당시 연구소는 소장 자리만 만들어 놓고 잠 잘 곳도 씻을 곳도 수돗물 

나오는 곳도 전기 들어오는 곳도 안 만들어 놓았단다. 
(심지어  입을 옷도 없어서 
우장춘  소장은  행사장에  누더기  외투에  고무신  끌고  나가셨단다

 
이런  참담한  상황에서 10 여년 동안  우 장춘은  대한민국을  기어코 
구원하시고야  마는데, 그 업적의  핵심은  바로, 


우량 종자 개발.

농업만 그랬겠냐만은 일제 치하의 조선은 철저하게 일본에  종속된 '
식민농업지'였다. 일본에서 종자를 들여와 일본식 기술로
 농사를 지어야 했는데, 일본이  패망한 뒤로는  그게 불가능해 진 거다. 

식량조차 자급자족이 안되는 나라, 이 처절한 대한민국에서 가장 중요한 건

 우수 종자를 개발하는 것이었다. 식량 작물은 키워 놓으면 지가 알아서 씨를 
틔워 번식하는게 아닌 모양이었다. (난 영농기술에 잘 모르니 원) 인공적으로 
종자를 개발해야 생산성이 높아지고 사람들을 먹여살릴 수 있었던 모양. 



우장춘은 가장 먼저 우량 종자 개발에 주력, 최단시간 내에 배추, 무, 고추, 
오이, 양배추, 양파, 토마토, 수박, 참외 등에 걸쳐 20여 품종에서 종자를 
확보한다. (그 외에도 한해 두번 수확하는 벼 품종 개발 등 무수히 많단다) 


이로서 대한민국에 현대 농업기술이 시작됐고 국민들은 기아에서 점차적으로 벗어날 수 있었다. 뿐만 아니라 우장춘이 손을 댄 우량 종자들은 외국 것을

 능가하는 엄청난 품질이었다. 
우장춘이 얼마나 천재였는지 보여주는 가장 두드러진 사례는 바로 제주 감귤이었다. 



한국이 세계에 자랑하는 최우수 과일 품종 "제주 감귤." 이 엄청난 작물의
 종자와 재배 기술을 창작해 낸 것도 모자라, 우장춘은 이걸 제주와 남해안
 일대에 생산지를 구축, 제주 감귤 산업을 일으켜 세우셨다. 

이것만 있냐, 아니다 . 강원도 감자 있잖수. 이거이 특정 바이러스에 너무
 취약해 한번 창궐하면 전멸을 하곤 했단다. 그때마다 강원도민들의 
상당수는 굶어죽는 거였고. 이걸 종자를 변형시켜 면역을 가진 강력한
 작물로 탈바꿈 시켰다. 

그리고 페튜니아를 화초로 가꿀 수 있도록 개발해서 원예 산업을 일으켜

 세웠고... 이건 일본에서도 깜짝 놀랐던 엄청난 업적이라는데 
내가 잘 몰라서  그냥 패스. 

 

페튜니아 교배 연구 중인 우장춘 선생님

 

우장춘 박사는 먹고 사는 것만 해결해 주신게 아니라 먹는 걸로 경제와 
산업을 창출하는 기반까지 닦아 주신... 그 당시엔 말 그대로 하늘에서 
내려온 구원의 천사였던 거다. 


영웅의 수난


처음에 한국에 오실 때 우장춘 박사는 한국에 뼈를 묻겠다고 하셨다는데, 
솔직히 그게 사실인지는 알수가 없다. 

솔직히 그렇게 말했다고 하더라도 별로 뼈를 묻고 싶은 나라는 아니었을게다. 

우장춘 박사는 말 그대로 대한민국을 위해 온몸을 산화한  영웅이었다. 

십이지장 궤양으로 병원에  입원한 상태에서, 그 때 한참   실험 중이던 
일식이수(一植二收)의 벼를 비닐 봉투에 넣어 링거병이랑 같이  걸어 놓고
 관찰할 정도였다. 

근데 이승만과 그의 떨거지들은 우장춘을 우습게 여겼다. 왜냐, 우리말을 

잘 못했거든. 

당시 정신나간 권력자들은 일본에 대한 적개심으로 활활 불타고 있었고,

 일본말만 잘하는 우장춘을 밉게 보았다. 
우장춘 박사는 사실 한글에 도통한 분이었다. 왜 그런 사람 있잖수

 영어 읽기 듣기 쓰기 다 잘하는데
 말하기만 젬병인 사람. 우장춘이 그랬다.
 다 잘하는데 한글을 구사하는 것만 못했다. 

그래서 아예 대놓고 구박하고 모욕을 줬다. 아예 공개석상에서  일본말만

 지껄일 중 알면서  무슨  애국을 하겠다며  망신을 준 정치인도 있었다. 

세계적인 유전학 석학이 한국에 오니까 졸지에 외국인 노동자 된 거다.

 이 때부터 그 잘난 대한민국의 처절한 과학자/엔지니어 냉대 전통이 
시작된 거라는 거지. 

그리고 결정적으로, 어머니가 작고하셨을 때도, 딸이 결혼을 했을 때도

 우장춘은 일본으로 건너가지 못했다. 이승만 정권이 출국 금지를 시켰걸랑. 

정확한 이유는 잘 모르겠지만, 평소 바른 말을 잘하는 우장춘이 이데올리기

 문제에 관해 입바른 소릴 한 모양이었다. 그 소릴 들은 이승만 정권은 
'사상에 문제가 있네'라며 그를 출국 금지시켜 버렸다. 






 
한국 땅에서 어머니의 제사를 치르고 있는 우장춘 선생님
어머니의 죽음, 딸의 결혼도 함께 하지 못한 우장춘. 아들로서 아비로서 
가슴 찢어지는 고통이었겟지만, 

그러나 우장춘은 끝까지 조선인을 위해 마지막 생을 바쳤다.

그는 1959년 죽는 순간까지 더 우수한 벼 품종을 만들기 위해  연구에 

연구를 거듭했다. 그는 죽는 순간까지도 자신의
 마지막 작품을 완성시키려는 생각 밖에 없었다고 한다. 

죽기 하루 전 정부로부터 문화 포상받은 우장춘, 이렇게 말하며 눈물을

 철철 흘렸다고 한다. 

"조국이 날 인정했구만... 근데 좀 일찍 좀 주지..."

 





 
한국 원예연구소 재임 당시의 우장춘 선생님
한국의 모든 전후 세대는 이 위대한 인물에게 큰 빚을 졌다


이승만 정권은 우장춘을 철저히 이용만 해 먹었다. 그들은 우장춘의 업적을 
기록에 남기는 것조차 소홀했다. 그래서 우리는 아직도 구국의 영웅이자
 만능 천재 과학자 우장춘에  대해  아직도  제대로  모르고 있는 거다. 

50여년이 흐른 지금도 마찬가지다. 인터넷에서 검색해도, 서점에서 책을

 찾아도, 우장춘에 관한 콘텐트는 코흘리개 애들 교과서 한귀퉁이에
 실릴 정도의  분량  밖에  나오지 않는다. 

되려, 일본에서 출판된 책이 우장춘의 생애에서 대해 잘 정리해 놓았다. 

일본 여류 작가 쓰노다 후사코의 "조국은 나를 인정했다"라는 책. 이 책이

 요즘 우리가 접하는 우장춘 박사에 대한 모든 정보의 소스원이다. 
아래 링크에 책 정보가 있다.  (모셔 온  글입니다)


http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=5000131723
                      

2013년 3월 7일 목요일

노티피케이션에 관하여...

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.notification_icon).setContentTitle("Event tracker").setContentText("Events received")
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] events = new String[6];// Sets a title for the Inbox style big view
inboxStyle.setBigContentTitle("Event tracker details:"); // Moves events into the big view
for (int i=0; i < events.length; i++) {   
inboxStyle.addLine(events[i]);
}
// Moves the big view style objec0t into the notification object.mBuilder.setStyle(inBoxStyle);


구글 메뉴얼에는 이렇게 나와 있다.

구식은 이렇다.

if (null == computerManager) {
    Log.d(TAG, "pu null");
    return;
   }
   Intent intent = new Intent("com.count.reset");
   PendingIntent pi = PendingIntent.getBroadcast(
     ContextManager.getContext(), 1, intent,
     PendingIntent.FLAG_ONE_SHOT);
   if (null == mmegicomputer) {
    Log.d(TAG, "Making computer here");
    mmegicomputer = new Notificaiton();
    mmegicomputer.icon = android.R.drawable.btn_star;
    mmegicomputer.when = System.currentTimeMillis();
    mmegicomputer.flags = computer.FLAG_AUTO_CANCEL;
    mmegicomputer.tickerText = "droid";
    // mmegicomputer.contentIntent = pi;
    mmegicomputer.setLatestEventInfo(
      ContextManager.getContext(), "droid",
      ContextManager.getContext().getString(R.string.msg)+
      ++deniedCount
      + "count", pi);
   } else
    return;
   computerManager
     .notify((int)1234, mmegicomputer);


이부분
   if (null == mmegicomputer) {
부터 노티피케이션을 만든다.

Notificaiton mmergicomputer = new Notification();
이 만드는 코드.
일단 Notification 객체 인스턴스를 만들면 그 내부의 멤버변수들에게
이런저런 설정을 해주고.

notificationManager를 통하셔 뿌려준다.

NotificationManager computerManager ;

이런거지

NotificaitonManger는 안드로이드 떠 있을 동안 하나밖에 없을 테니 싱글톤
클레스 일 것이다.

그래서

컨텍스트.getSystemService(
        Context.NOTIFICATION_SERVICE);

로 새롭게 만드는게 아니라 얻어 와야 한다.(인스턴스 없으면 싱글톤에서 알아서 만들겠지)


그런데 이 방식은 구식이다.


새로운 노티는 (시간 지나면 이것도 더 이상 새롭지 않겠지만)

computerManager
     .notify((int)1234, mmegicomputer);
가 아니라.
computerManager.notify((int)1234, mmegicomputer.build());

와 같이 변화 된다.

그래서 만드는 방식도 new Notification이 아니라.

NotificationCompat.Builder mmegicomputer= new NotificationCompat.Builder(blahblah.getContext())
   .setSmallIcon(android.R.drawable.btn_star)
   .setContentTitle("Event tracker")
   .setContentText("Events received")
   .setAutoCancel(true)
   .setNumber(0)
   .setContentIntent(pi)
   .setStyle(inboxStyle)
   .setLights(0, 0, 0)
   .setTicker("wewefe")
   .setUsesChronometer(true);

이렇게 바뀌었다.

가만보면 별로 바뀐게 없는데 영문 메뉴얼 보다보면 겁나 많이 바뀐 것처럼 설명해 놓았다.

노티보면 커졌다 작아 졌다도 된다.


 NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
   String[] events = new String[6];// Sets a title for the Inbox style
           // big view

 events[0] = "Event tracker";
   events[1] = "Events received";
   events[2] = "ffggggggaefawefweaf";
   events[3] = "ffggggggaefawefweaf";
   events[4] = "ffggggggaefawefweaf";
   events[5] = "ffggggggaefawefweaf";


   for (int i = 0; i < events.length; i++) {
    inboxStyle.addLine(events[i]);
   }
요렇게 만들고


 mmegicomputer.setStyle(inboxStyle);


요렇게 추가해 주면 펼쳤을 때는 쟤가 보인다.



Android.mk 피처링 처리. 스트링 가져오기

ifeq ($(CONDITION),true)
endif

간단하지만 자주 까먹는.
context.getString(R.string.string)
OK

Manifest에서 바로 receiver 다는 방법.

요런 식으로...

receiver android:exported="true" android:name=".Receiver"br /

intent-filterbr /


action android:name="android.intent.action.BOOT_COMPLETED">

꺽쇠넣으니 제대로 안나와서 부분 생략.

2013년 3월 6일 수요일

윈도우 디버거 및 심볼 다운로드 주소

http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

윈도우 디버거 및 심볼 다운로드 주소

http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

2013년 3월 5일 화요일

시스템 콜 추가

시스템 콜 추가.

man syscall

SYSCALL(2)                                                             Linux Programmer's Manual                                                             SYSCALL(2)

NAME
       syscall - indirect system call

SYNOPSIS
       #define _GNU_SOURCE        /* or _BSD_SOURCE or _SVID_SOURCE */
       #include
       #include   /* For SYS_xxx definitions */

       int syscall(int number, ...);

DESCRIPTION
       syscall() performs the system call whose assembly language interface has the specified number with the specified arguments.  Symbolic constants for system calls
       can be found in the header file .

RETURN VALUE
       The return value is defined by the system call being invoked.  In general, a 0 return value indicates success.  A -1 return value indicates  an  error,  and  an
       error code is stored in errno.

NOTES
       syscall() first appeared in 4BSD.

EXAMPLE
       #define _GNU_SOURCE
       #include
       #include
       #include

       int
       main(int argc, char *argv[])
       {
           pid_t tid;

           tid = syscall(SYS_gettid);
       }


1. android/kernel/arch/arm/include/asm/unistd.h 번호 추가

2. android/kernel/include/linux/syscalls.h 함수 추가

3. android/kernel/arch/arm/kerne/calls.S 시스템 콜 테이블에 추가(부여한 번호랑 순서가 같아야 한다.) -> 다른 칩셋 보면 syscall_table이라고 명명한 옳은 아해들도 있다.

함수 본체 추가는 암때나 android/kernel도 괜찮고 암때나.



죽지 않는 안드로이드 서비스 만들기.

        android:persistent="true"

메니페스트에 요렇게.

2013년 3월 4일 월요일

숙제 완료~

public class Student {
/*
* 속성(멤버변수)
* 1.학번
* 2.이름
* 3.국어
* 4.영어
* 5.수학
* 6.총점
* 7.평균
* 8.평점
*/
private int undergrade;
private String name;
private int kor;
private int eng;
private int math;
private int tot;
private double avg;
private char grade;
private int rank;

public Student() {

}

public Student(int undergrade, String name, int kor, int eng, int math) {
this.undergrade = undergrade;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}

/*
* 기능 (멤버 메서드)
* 1.DataSet
* 2.총점 계산
* 3.평점 계산
* 4.출력
*/

public void setData(int undergrade, String name, int kor, int eng, int math) {
this.undergrade = undergrade;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}

public int tot() {
if (kor > 100 || kor < 0) {
System.out.println("국어의 점수 입력이 잘못되었어요");
} else if (eng > 100 || eng < 0) {
System.out.println("영어의 점수 입력이 잘못되었어요");
} else if (math > 100 || math < 0) {
System.out.println("수학의 점수 입력이 잘못되었어요");
}
return tot = kor + eng + math;
}

public void avg() {
this.avg = (double) tot / 3 * 100;
int a = (int) this.avg;
avg = (double) a / 100;
}

public void grade(){
if(avg>=90){
grade = 'A';
}else if(avg>=80){
grade = 'B';
}else if(avg>=70){
grade = 'C';
}else if(avg>=60){
grade = 'D';
}else{
grade = 'E';
}

}
public void print(){
System.out.println(getInfo());
}
public String getInfo(){
return undergrade +"\t" + name +"\t"+ kor +"\t"+ eng +"\t"+ math +"\t"+ tot +"\t"+ avg +"\t"+ grade;
}


public int getUndergrade() {
return undergrade;
}

public void setUndergrade(int undergrade) {
this.undergrade = undergrade;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getKor() {
return kor;
}

public void setKor(int kor) {
this.kor = kor;
}

public int getEng() {
return eng;
}

public void setEng(int eng) {
this.eng = eng;
}

public int getMath() {
return math;
}

public void setMath(int math) {
this.math = math;
}

public int getTot() {
return tot;
}

public void setTot(int tot) {
this.tot = tot;
}

public double getAvg() {
return avg;
}

public void setAvg(double avg) {
this.avg = avg;
}

public char getGrade() {
return grade;
}

public void setGrade(char grade) {
this.grade = grade;
}

public int getRank() {
return rank;
}

public void setRank(int rank) {
this.rank = rank;
}

}
============================================


public class StudentArrayMain {

public static void main(String[] args) {

Student[] st = new Student[5];

// 학생의 데이타 생성(입력)
st[0] = new Student();
st[0].setUndergrade(1);
st[0].setName("김경호");
st[0].setKor(78);
st[0].setEng(88);
st[0].setMath(79);

st[1] = new Student(2, "김은희", 89, 66, 89);
st[2] = new Student(3, "신명숙", 45, 33, 77);
st[3] = new Student(4, "최경녀", 88, 99, 34);
st[4] = new Student(5, "김봉화", 23, 99, 100);

// 1 모든 학생성적 계산
int i = 0;



for (i = 0; i < st.length; i++) {
st[i].tot();
st[i].avg();
st[i].grade();
}
// 2 모든 학생 출력
System.out.println("-------모든 학생 출력--------");
for (int j = 0; j < st.length; j++) {
st[j].print();
}

// 3 전체 총점, 평균, 평점 출력
System.out.println("-------전체 총점, 평균, 평점 출력--------");
int alltot = 0;
for (int j = 0; j < st.length; j++) {
alltot = alltot + st[j].tot();
}
double allavg = alltot / 6 / 3;

System.out.println("총점 :" + alltot);
System.out.println("평균 :" + allavg);

// 4 평균 80이상 학생인 학생들 출력
System.out.println("-------4 평균 80이상 학생인 학생들 출력--------");
int avg80 = 0;
for (int j = 0; j < st.length; j++) {
st[j].tot();
avg80 = st[j].tot() / 3;
if (avg80 >= 80) {
System.out.println(st[j].getName());
} else {

}
}
// 5 3번 학생 정보출력
System.out.println("-------3번 학생 정보출력--------");
for (int j = 0; j < st.length; j++) {
if (st[j].getUndergrade() == 3) {
System.out.println(st[j].getInfo());
}
}

// 6 최경녀 이름을 가진 학생들 정보 출력
System.out.println("-------최경녀 이름을 가진 학생들 정보 출력-------");
for (int j = 0; j < st.length; j++) {
if (st[j].getName().equals("최경녀")) {
System.out.println(st[j].getInfo());
}
}

// 7 평점이 A 이상인 학생들 출력
System.out.println("---------- 평점이 A 이상인 학생들 출력-------");
for (int j = 0; j < st.length; j++) {
if (st[j].getGrade() == 'A') {
System.out.println(st[j].getInfo());
} else {
System.out.println("A학점의 학생이 없습니다");
break;
}
}

// 8 모든 학생의 국어점수 +5
System.out.println("---------- 모든 학생의 국어점수 +5-------");

for (int j = 0; j < st.length; j++) {
if (st[j].getKor() < 95) {
st[j].setKor(st[j].getKor() + 5);
st[j].tot();
st[j].avg();
st[j].grade();
} else {
st[j].setKor(100);
st[j].tot();
st[j].avg();
st[j].grade();
}

st[j].print();
}
}

}


bootcamp 지우기

맥북 프로 레티나 터치바 diskutility 에서 bootcamp 파티션 삭제하면 검은색에서 회색으로 바뀐다(APFS로 지정) 파틴션 아이콘 클릭하여 - 버튼을 이용하여 삭제하면 끝.