기본 콘텐츠로 건너뛰기

글

JSONObject 전용 CustomView Adapter를 만들었다.

질보다 양이 우선하는 허접안드로이드 프로그램 의뢰를 처리해주고 있다. 어찌나 기능들이 다양한지 덕분에 스터디는 제대로 하네 ㅎㅎ 하다보니 리스트들이 엄청 많은데 SimpleAdapter 로 대충 하려고 했더니 요리조리 잘도 빠져들 나가서 커스텀 시리즈를 하나씩 종류별로 다 만들고 있다. SimpleAdapter를 선호하는 편인데 Hash Map 에만 넣어주면 이미지건 뭐건 알아서 잘 해주니까 좋다. myAdapter = new SimpleAdapter(this, groupData, R.layout.couponlist, new String[] { "title", "desc" }, new int[] { R.id.textViewListTitle, R.id.textViewListDesc }); mListView.setAdapter(myAdapter); 대략 이런식. 1.context 를 주고, 2.Map의 ArrayList 형을 받고, 3.리스트를 표현할 Layout을 정하고 4.리스트에 값을 가져올 Map의 키와 5. 그 키값에 대응하는 List안의 View들을 대응 이것만으로 오케이 물론 이것마저도 사실 지저분하고 더러운 코드로 보이지만 자바에선 이정도면 짧은 코드인편 그런데 이걸 Custom으로 구현하면 갑자기 일이 커진다. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html 나는 짜증나서 이짓 못하겠다. 일단 서버나 array.xml 등등에서 JSON을 다루는 일이 대부분이라서 SQLite DatabaseAdapter (어라 이것도 만들었네)에서도 그냥 죄다 키발키발(key:val)해버렸다. 하나 만들고 리팩토링하면서 생각해봐야지 하고 촥 만들고 보니 Custom ListAdapter라고 해봤자. 결국 getView 만...

왜 object에 prototype을 쓰지 않나?

http://triin.net/2009/09/13/Why_exactly_is_Object.prototype_verboten 이유는 이렇다. prototype 에 method 를 정의하면 자기 자신도 해당 object 에 카운트가 된다. 무슨말이냐? object (array포함) 의 key와 value를 보기 위해 종종 아래와 같이 해본다. var ages = {  John: 10,  Mary: 28,  Alice: 16}; 일때 (function(obj){ for (idx in obj) { console.log(idx+':'+obj[idx]) }})(ages)  이렇게 떠 보면 John:30 Mary:30 Alice:30 뭐 이렇게 나오겠지. 그럼 아예 object 에 이걸 prototype 해서 그냥 method 로 만들지 싶어 Object.prototype.printObject=function(){ for (idx in this) { console.log(idx+':'+this[idx]) }}; 요따우로 해주면 ages.printObject() > John:10 > Mary:20 > Alice:30 > printObject:function (){ for (idx in this) { console.log(idx+':'+this[idx]) }} 망한다. 다시 이야기 하지만 자기 자신도 객체의 일부가 되니까. 그래서 쓰지말라는 것이다. hasOwnProperty를 사용해서 피해가는 방법도 있겠지만 다른 문제가 있다. 자세한 설명은 생략한다. 왜 그런지 알고 싶으면 본문 봐라. (난 알고싶지 않아서 안봤다. 안쓸거니까 우왕ㅋ) 결론은 이거다. defineProperty 를 사용하자. ECMAScript 5 스펙이다. 하지만 망할 IE7 에선 안되겠지 http:/...

node.js 로 만드는 좀 더 본격적인 TCP Server

서로 에코만 하는게 부족하다면 유닉스의 wall 채팅을 구현해보자. 사실 이것만 되면 누가 접속했는지도 알고 누가 누구한테 무얼 보낼 수 있는지도 아는 셈이므로 채팅방을 하든지 온라인대전 격투게임 서버를 만들던지 바카라(어이쿠 위험한 단어) 서버를 만들던지 엠엠오알피지 서버를 만들던지 알아서 주무르면 된다. 자 그럼 이 대단한 서버의 코드를 보자 var clients = []; require('net').createServer(function(socket) {   socket.on("connect", function() {     clients.push(socket);   });   socket.on("close", function() {     clients.splice(clients.indexOf(socket), 1);   });   socket.on("data", function(data) {     var sender = this;     clients.forEach(function(client) {       if (client !== sender) client.write(data);     });   }); }).listen(1337,"0.0.0.0"); 네트워크 프로그래밍 좀 해본 사람이라면 다리에 힘이 턱 풀릴 정도로 허무한 코드라고 할 수 있겠다. 코드를 위에서부터 말로 쭉 설명하자면 1. 빈 접속자 배열을 만든다. 2. connect 할때마다 접속자 배열에 해당 소켓을 추가한다. 3. close 하면 socket 의 위치를 찾아(indexOf) 해서 떼어낸다(splice) 4. data 즉 접속자로 부터 입력을 받으면 자기 자신이 아닌 다른 모든 소켓에게 쓰기를 한다. 5. 이 모든 것을 1337번 포트에 연...

node.js server pattern

에코 서버 3줄이면 된다는 걸 증명하기 위해선 require('net').createServer(function(socket) {   socket.pipe(socket); }).listen(1337,"127.0.0.1"); 요정도면 충분. 접속/서버메시지/접속종료 구현은 require('net').createServer(function(socket) {   socket.on("connect", function() {     socket.write("hello\n");   });   socket.on("close", function() {     console.log("closed");   });   socket.on("data", function(data) {     socket.write("usay:"+data);   }); }).listen(1337,"127.0.0.1"); 이정도면 충분하겠다.

DotCloud 에서 Redmine 수정 후 Push 하였을때 발생하는 오류에 대한 대처법

http://www.redmine.org/boards/2/topics/11085 구글링해보았다. a key is required to write a cookie containg the session data 오류인데 당황하지 말고 $ dotcloud ssh redmine.redmine (redmine.redmine 은 나만 이렇게 쓰고 있으니 알아서 변경하시길) 로 들어가서 $ cd current $ rake config/initializers/session_store.rb 해주면 끝.

redmine project 식별자(identifier) 변경

보통은 식별자를 Admin모드에서 바꿀 수 없다. 하지만 누구나 실수는 하는 법. mysql 을 뒤져보니 간단하게 바꿀 수 있더라. $ dotcloud ssh redmine.db $ mysql -uroot -p<암호> mysql> use redmine; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------------------------+ | Tables_in_redmine                   | +-------------------------------------+ | attachments                         | | auth_sources                        | | boards                              | | changes                             | | changesets                 ...

dotcloud 에 redmine 등록 후 Domain 도 연결해보자

redmine 을 dotcloud.com 에 올렸습니다. 무료니까요. 이후 할것들이 몇가지가 있다. 하나는 Domain 연결이고 나머지 하나는 mail notification 인데 차근차근 보자 잘 등록했다면 list 를 보았을때 $ dotcloud list redmine:   - db      (type: mysql; instances: 1)   - redmine (type: ruby; instances: 1) 라고 나올 것이다. http://docs.dotcloud.com/guides/domains/ 가이드대로 $ dotcloud alias add ramen.www www.example.com 형식으로 써보자 어플리케이션명이 redmine 이고 모듈도 redmine 이니까 $ dotcloud alias add redmine.redmine www.<니가 쓰는 도메인> 형식이 되겠다. 아래와 같이 나오면 정상. Ok. Now please add the following DNS record: www.<니가 쓰는 도메인>. IN CNAME gateway.dotcloud.com. 내 경우엔 서브도메인으로 쓰고 싶어서 $ dotcloud alias add redmine.redmine redmine.<내 도메인> 형식으로 썼다. 브라우저에서  http://redmine.<내 도메인> 으로 접근했을때 CNAME Alias 를 줘서 호스팅 서비스쪽에서 gateway.dotcloud.com 을 바라보게 하고 gateway.dotcloud.com 에서 해당 어플리케이션으로 연결되게 하는 구조다. netfirms.com 이란 곳에서 도메인 호스팅을 받고 있는데 관련 설정을 보면 이런 식이다. CNAME (Alias) A CNAME record (also known as an alias record) is a subdo...