이거슨 안드로이드 에뮬레이터 입니다. 우리가 안드로이드 개발할 때 쓰는 거지같이 느린 안드로이드 에뮬레이터와는 차원이 틀린 것입니다. 일단 겁나 빠릅니다.

공식사이트는 여기입니다.

http://www.genymotion.com/

얘네들이 2.0으로 버전업을 하면서 부분 유료화를 선언을 했어요. 하긴 이거 만든 사람도 먹고는 살아야하니까... 최근 앱들도 부분유료화가 대세... 얘네도 대세를 따랐겠죠... 

암턴간 원래 제니모션1.3.x에는 google app들이 다 포함이 되어있었어요. 근데, 뭐 라이센스 문제로 일단 그냥 뺀 것 같아요. 하지만, 구글링 해보니 방법은 있는 것 같아요. 하라는대로 하니까 잘 됐어요. 저도 까먹지 않고 다시 설치를 하기 위해 기록해둡니다.

1. GENYMOTION 다운로드

http://www.genymotion.com/ 여기가서 signup을 눌러서 가입을 합니다. 그리고 로그인을 합니다. 그러면 Get Genymotion을 클릭하면 다운로드를 받을 수 있어요. 이건 VirtualBox위에서 돌아가는거라 VirtualBox도 같이 설치해줘야해요. Windows용은 올인원이 존재하는데, Mac OSX는 따로 받아야해요. VirtualBox사이트가서 받아와야해요. 
https://www.virtualbox.org/wiki/Downloads 
여기서 OS X용을 받아서 설치하면 돼요. 그리고 제니모션도 받아서 설치하면 돼요. 

2. GENYMOTION실행 후 가상머신 추가.

처음에 아무것도 없으면 가상머신 추가할꺼냐고 물어봐요. 한다고해요. 그럼 Connect버튼이 나오는데, 로그인을 해야 원하는 디바이스를 선택할 수 있대요. 로그인을 해요. 아까 가입한 걸로 로그인해요. 

원하는 기종과 버전을 골라요. 저는 넥서스7이 갖고 싶으니까 이걸로 선택했어요. 이렇게 기종이 참 많아요.

선택하고 Next를 하면 해당 롬을 다운로드 받아요. 겁나 빨리 잘 돼요. 

3. 옵션셋팅

옵션에는 원하는 해상도로 롬을 띄울 수 있어요. 그리고 우리는 한글 사용자이기 때문에 use virtual keyboard for typing을 선택해요. 이걸 선택하지 않으면 키보드가 안나오는데, 기본 키보드는 한글이 지원이 안돼요. 그래서 그냥 가상 키보드를 이용해서 타이핑을 하고 한글 키보드를 설치하면 한글을 쓸 수 있어요.

4. 잘 실행되는지 확인

play를 하면 실행이 돼요. adb설정할껀지 물어요. 개발자이신 분들은 뭔지 알꺼에요. Android SDK패스를 지정해주면 되고, 그냥 한 번 돌려보고 싶으신 분들은 그냥 패스해도 돼요. 그만 물어봐 체크해도 돼요. 대신 adb를 설정하면 나중에 adb를 이용해서 앱도 설치하고 파일도 복사하고 adb기능을 사용할 수 있어요.

잘 돼요. 근데 마켓도 없고 아무것도 설치할 수 없어요.

5. ARM Translation Installer v1.1 설치

http://goo.gl/JBQmPa 이 링크를 클릭하면 받을 수 있어요.
그리고 그 받은 zip파일을 그대로 Genymotion에 드래그앤드랍으로 떨구면 지가알아서 복사해요. 경고가 뜨는데 system인데 복사할꺼냐 묻는 것 같아요. 그냥 무시하고 복사고고싱.
그리고 재부팅 고고싱!

6. Google Apps 다운로드 및 설치.

http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

위에 링크에서 받을 수 있는데, 여기서 좀 주의해야할 것이 버전에 주의해야 해요.
만약 처음에 에뮬레이터 만들 때 4.2.2를 선택했다면 20130813버전을 깔면 안돼요. 맛이 가요. 굵은 글씨로 Not compatible with 4.2.x!라고 당당히 써있어요.
4.2.2이면 20130812버전을 받아서 설치하면 돼요.

4.3버전을 설치했으면 20130813 최신버전을 설치해도 돼요. 

참고로 다운로드 받는데 더럽게 느려요. 그래서 구글링할 때 보면 해당 파일이름으로 검색하면 구글드라이브에 올라온 파일이 있어요. 
gapps-jb-20130813-signed.zip 이런식으로 구글에 검색하면 나와요. 
그걸 받아서 똑같이 Genymotion에 드래그앤드랍하고 껐다가 켜면 지가알아서 플레이스토어, 지메일 등이 설치가 되어 있을꺼에요.

7. 언어 변경

어플서랍에서 Settings에서 Language & input에서 한국어로 바꿔주면 돼요.

짠 완성이에요.

이제 알아서 커스텀마이징해서 쓰면 돼요.

4.3버전을 기기없이 테스트 및 개발할 수 있게 되었어요.




 
Posted by 머드초보
,
 

제목이 뭔가 거창한데, 그냥 소스파일을 그대로 원하는 웹서버에 배포하는 내용입니다. java 개발인 경우에는 뭐 필요없지만, php인 경우에는 컴파일이 필요없이 웹서버에 복사만 하면 되는 경우라 이 방법을 택했습니다.
개인별로 개발하고 푸쉬타임에 해당 웹서버에 배포하게 되어서 서버에서 테스트해볼 수 있는 구조를 만드려고 했습니다.

환경은 gitolite + gitlab으로 설치되어 있는 환경입니다.

구조는 간단합니다.
배포하려는 서버에 git을 clone을 합니다. 그리고, 서버훅을 이용해서 push 후에 스크립트를 실행할 수 있는 스크립트를 실행해서 그 서버에서 pull을 하거나 reset을 하면 됩니다.
이 구조는 git서버, 배포서버, 로컬 이렇게 다 나눠진 경우입니다.

1. 배포할 서버에 git서버 공개키 추가
이걸 하는 이유가 서버와 git서버가 틀린 경우에 하는 겁니다. git서버에서 해당 배포서버에 비번없이 접속하려고 하다보니 ssh키가 필요합니다.
git서버로 접속해서 ssh키를 생성합니다.

sudo su git
ssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub

id_rsa.pub 파일을 복사해서 배포할 서버의 ~/.ssh 디렉토리 안에 authorized_keys 파일을 생성해서 붙여넣습니다. 그럼 이제, git -> 배포서버에서 ssh접속 시 비밀번호 없이 접속할 수 있습니다.

2. 해당 서버에 공개키를 git서버에 추가
이걸 하는 이유는 해당 서버에서 git서버에서 clone을 받아야 하기 때문입니다. 즉 서로 등록이 필요한 것이죠. 으핫. 위와 동일한 방법으로 ssh-keygen으로 생성합니다. 그리고 id_rsa.pub파일을 복사해서 authorized_keys파일에 추가합니다. gitlab을 사용하고 있다면 사용자 ssh키 등록만 해주면 되겠죠?


3. 해당 배포 디렉토리에 git clone하기
소스가 있는 git repository를 해당 배포할 디렉토리에 clone을 합니다. 저는 일단 아파치 기본 폴더에 했습니다. 일단 clone 시에는 다 지워야해서... 다 지우고 clone!

cd /var/www
rm -rf *
cd ..
git clone 해당git주소(ex:git@domain:mudchobo.git) www

이렇게 하면 /var/www가 해당 repository가 되어버립니다. 루트가 되어버리는 것이죠.

4. hooks 설정
일단 해당 서버에 pull을 하는 스크립트를 작성해서 스크립트가 실행될 수 있게 합니다.

vi /var/www/pull.sh
cd /var/www/
git pull origin
:wq
chmod +x pull.sh

gitolite로 설치를 해서 해당 서버훅을 사용하려면 git계정으로 접속하면 repositories 디렉토리에 hooks 관련 스크립트 디렉토리가 있습니다. 여기서 post-update 스크립트에 넣으면 client에서 push를 할 때 실행되게 됩니다.

cd /home/git/repositories/mudchobo.git/hooks
vi post-update
ssh mudchobo@서버주소 "/var/www/pull.sh"
:wq

여기서 post-update를 한 번 실행을 해줘서 신뢰할 수 있는 사이트에 등록을 해줘야합니다. 스크립트 실행 시 한번에 다 실행이 되야해서 yes/no 물음이 없어야 하거든요. 그래서 한번 실행해서 신뢰할 수 있는 사이트에 등록합니다.

5. 클라이언트에서 push하기
이제 다른 pc에서 push하면 바로 해당 서버에서 자동으로 pull이 되게 됩니다. 그래서 push타임에 서버에 배포되는 것처럼 되는 것이지요.

vi index.php
<?php
    phpinfo();
?>
:wq
git add .
git commit -m "index add"
git push origin
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: From localhost:mudchobo
remote:    3455f24..308e01a  master     -> origin/master
remote: Updating 3455f24..308e01a
remote: Fast-forward
remote:  index.php |    1 +
remote:  1 file changed, 1 insertion(+)
To git@192.168.198.130:mudchobo.git
   3455f24..308e01a  master -> master

저희는 일단 이렇게 쓰려고 지금 셋팅을 하고 있는데.....제대로 된 것이 맞는지 의문이네요. 하다가 잘 안되면 다시 방법이 바뀔지도......ㅠㅠ

 
Posted by 머드초보
,
 

회사에서 git를 도입하려고 하는데, 그래서 막 조사하다보니 github enterprise같은 게 있더라구요. 근데, 이건 한 달에 $20 금액을 내야해서 너무 비쌌습니다. 그래서 오픈소스로 github같은 UI의 툴이 있더라구요. 그게 GITLAB입니다.

이거 근데 설치하는데 너무 힘들어서.......설치하다가 빡칠 뻔했습니다. 근데, 회사에선 오래 걸렸는데, 집에서 다시 와서 차근차근 해보니 금방 설치했네요. 뭔가 좀 이해를 하고 설치를 하니까 금방 설치한 것 같네요.

아 우분투는 최신버전인 12.04 버전을 사용했습니다.

gitlab 사이트입니다.
http://gitlabhq.com/
보면 사이트에서 Try It을 하면 체험할 수 있어요.

아래 문서는 gitlab 공식 설치 페이지입니다.
https://github.com/gitlabhq/gitlabhq/blob/master/doc/installation.md

이 문서대로 보고 하면 잘 되야는데, 저 같은 경우에는 뭔가 삑사리가 몇 번 났습니다. 뭔가 설치가 안되어있다고 자주 떴는데, 그래서 이것저것 모아보니 apt-get install로 이것저것 많이 설치해줘야 하더라구요.
제가 설치한 히스토리를 정리합니다.

요거 아래 것처럼 이렇게 많이 설치합니다.

sudo apt-get install build-essential git-core wget curl gcc checkinstall libxml2-dev libxslt-dev sqlite3 libsqlite3-dev libcurl4-openssl-dev libreadline-dev libc6-dev libssl-dev libmysql++-dev make build-essential zlib1g-dev libicu-dev redis-server openssh-server python-dev python-pip libyaml-dev

그 다음 공식사이트에서 제공하는 루비 + gitolite를 한번에 설치해주는 스크립트를 실행합니다.

curl https://raw.github.com/gitlabhq/gitlabhq/master/doc/debian_ubuntu.sh | sh

근데, 저 같은 경우에는 마지막에 뭔가 퍼미션 에러랑 패스에러가 같이 나면서 설치가 잘 안된 것 같았습니다. 그래서 이 부분을 다시 했습니다. 이런 에러가 떴었어요.

 ***** WARNING *****
gl-setup is not in your $PATH.

Since gl-setup MUST be run from the PATH (and not as src/gl-setup or such),
you must fix this before running gl-setup.  The simplest way is to add

    PATH=/home/git/bin:$PATH

to the end of your bashrc or similar file.  You can even simply run that
command manually each time you log in and want to run a gitolite command.

그래서 패스잡아주는 게 잘 안된 것 같아 .profile만드는 부분 부터 다시 했습니다.

sudo -u git sh -c 'echo "PATH=\$PATH:/home/git/bin\nexport PATH" > /home/git/.profile'
sudo -u git -i -H /home/git/gitolite/src/gl-system-install
sudo cp /home/gitlab/.ssh/id_rsa.pub /home/git/gitlab.pub
sudo chmod 777 /home/git/gitlab.pub

sudo -u git -H sed -i 's/0077/0007/g' /home/git/share/gitolite/conf/example.gitolite.rc
sudo -u git -H sh -c "PATH=/home/git/bin:$PATH; gl-setup -q /home/git/gitlab.pub"

sudo chmod -R g+rwX /home/git/repositories/
sudo chown -R git:git /home/git/repositories/


sudo -u gitlab -H git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
sudo rm -rf /tmp/gitolite-admin

해보니 테스트로 잘 받아지고, 잘 삭제가 되었습니다.
그 다음 문서에 4단계부터 하는 것은 그대로 진행하면 잘 됩니다.

sudo gem install charlock_holmes
sudo pip install pygments
sudo gem install bundler
cd /home/gitlab
sudo -H -u gitlab git clone git://github.com/gitlabhq/gitlabhq.git gitlab
cd gitlab
sudo -u gitlab cp config/gitlab.yml.example config/gitlab.yml
sudo -u gitlab cp config/database.yml.sqlite config/database.yml
sudo -u gitlab -H bundle install --without development test --deployment
sudo -u gitlab bundle exec rake gitlab:app:setup RAILS_ENV=production

이렇게 하면 설치가 잘 됩니다. 또 저 같은 경우에는 pygments 설치하다가 잠시 다운로드 에러가 나서 안된 경우도 있었는데, 에러가 났는지 잘 확인하시고, 에러나면 다시 시도해서 하면 될 것 같습니다.

그 다음 서버를 시작하면 끝입니다.

sudo -u gitlab bundle exec rails s -e production -d


http://서버ip:3000/ 하면 로그인 하라고 뜨고, 로그인 아이디와 비번은 db셋팅할 때 나오는 것처럼
admin@local.host
5iveL!fe
하면 됩니다.

PS. 블로그를 보니 5월 22일에 3.0릴리즈를 준비중인 것 같은데, 코드를 최적화해서 할 것 같은데, 설치도 간편하게 만드는 게 더 중요할 듯?ㅠㅠ

 
Posted by 머드초보
,
 
Heroku에서 MongoDB도 쓸 수 있군요. 16메가까지 무료로 제공되는 것 같아요. 국내에서 이런 비슷한 서비스가 있다면 바로 썼을텐데...ㅠㅠ 확실히 heroku도 google app engine처럼 외국사이트라서 그런지 사이트가 느리긴 하네요...

http://addons.heroku.com/
addon목록들인데, 보면 MySQL도 있고, 그 외에 다양한 db도 제공하는 것 같아요. 
근데, MongoHQ와 MongoLab 두가지가 있던데, MongoHQ로 일단 해봤습니다. MongoLab은 일단 나중에.....(뭔지도 모르겠고....같은 몽고디비인지....)

아! 그리고 Heroku에서 이제 루비설치하고 gem으로 heroku설치하는 삽질을 안하도록 직접 exe파일의 설치파일을 제공하더라구요. 이 문서를 보고 잘 설치하시면 됩니다.
http://devcenter.heroku.com/articles/quickstart 
그리고 여기 devcenter의 메뉴얼이 너무 잘 작성이 되어있어서 그것만 보셔도 충분히 할 수 있을 것 같습니다.

간단하게 몽고디비와 socket.io를 이용해서 트위터형태에 예제를 만들어봤습니다. 그냥 글을 쓰면 상대방도 같이 접속해 있으면 글이 새로 추가되는 초간단 예제입니다.


1.  Node.js app 생성 및 heroku git에 push

일단 app생성하고 push하는 것은 여기 메뉴얼대로 다 하면 됩니다.
http://devcenter.heroku.com/articles/node-js 


2. 해당 앱에 Add on추가하기

위에 대로 해서 앱을 하나 만드셨다면 앱에 mongohq를 추가하셔야 쓸 수 있습니다. 
http://addons.heroku.com/mongohq 여기서 추가하거나 heroku addons:add mongohq:free라고 콘솔에서 때리시거나 하시면 추가가 됩니다. 추가되면 바로 쓸 수 있습니다. 여기에서 자체적으로 데이터 관리 사이트를 제공합니다. 
접속하는 방법은 heroku.com에서 My App에서 해당앱에 Resource를 클릭하고, 맨 아래 installed addons에서 MongoHQ클릭하면 관리사이트가 나옵니다.


3. Node.js와 연동하기 위한 mongoskin

연동하는 게 여러종류가 있는데, 저는 mongoskin을 사용했습니다. 

npm install mongoskin


사용법은 간단합니다.
 

var mongoUrl = process.env.MONGOHQ_URL || "mongodb://mudchobo:1234@127.0.0.1:27017/mudchobo?auto_reconnect"; 

var db = require("mongoskin").db(mongoUrl);
db.collection("pushboard"); // 컬렉션 가져오기
db.collection("pushboard").find(); // 목록가져오기
db.collection("pushboard").insert({content:"내용"}); 


요런식으로 쓰면 됩니다. heroku에서 사용하는 url은 환경변수로 지정되어있습니다. 그냥 저 변수 쓰면 접속됩니다. heroku에 올리기 전에는 로컬에서 할것이기에 로컬에 깔아놓고 테스트하라고 ||로 처리했습니다.


4. 초간단 푸쉬보드예제!

server쪽!
var PREFIX = "/pushboard";

exports.init = function(app, db, io){
    var pb = db.collection("pushboard");
   
    // 메인화면
    app.get(PREFIX, function(req, res){
        res.render("." + PREFIX + "/index", {
            title:"푸쉬보드!",
            addScript:"aa"
        });
    });
   
    // 리스트가져오기
    app.get(PREFIX + "/getList", function(req, res){
        var list = [];
        db.collection("pushboard").find().sort({_id:0}).limit(100).toArray(function(err, content){
            if (err){
                res.end();
            } else {
                res.json({list:content});
            }
        });
    });
   
    // 글쓰기
    app.post(PREFIX + "/write", function(req, res){
        pb.insert({content:req.body.content});
        res.end();
    });
   
    // 푸쉬소켓
    io.of(PREFIX + "/push").on("connection", function(socket){
        console.log("푸쉬소켓 연결!");
        socket.on("newContent", function(data){
            console.log("newContent = " + data);
            socket.emit("newContent", data);
            socket.broadcast.emit("newContent", data);
        });
        socket.on("disconnect", function(){
        });
    });
}

client쪽!
var socket;
$(document).ready(function(){
    //$.floatingMessage("로딩 완료!", {time:3000});
    // 글쓰기 클릭 시
    $("#btnWrite").click(function(){
        var val = $("#taContent").val();
        if (val == ""){
            alert("글을 입력하세요.");
            return;
        }
        $.post("write", {content:val}, function(){
            socket.emit("newContent", val);
        });
        $("#taContent").val("");
    });
   
    // 최초 글 가져오기
    getList();
   
    // 푸쉬서버연결
    socket = io.connect("/pushboard/push").on("newContent", function(data){
        console.log("newcontent! = " + data);
        $("#lvContent").prepend("<li>" + data + "</li>").listview("refresh");
        //$.floatingMessage("새로운 글이 추가되었습니다.", {time:3000});
    });
});

function getList(){
    $.get("getList", {}, function(data){
        var html = "";
        for (var i=0; i<data.list.length; i++){
            html += "<li>" + data.list[i].content + "</li>";
        }
        $("#lvContent").html(html).listview("refresh");
    });
}

초간단 예제라 설명은 그냥 생략하고 싶네요...픽온돋아서.....소스는 github에!
https://github.com/mudchobo/SampleForNodeJS

heroku에도 올렸습니다. 서버는 뭐 언제 내릴지는 모르겠지만, 일단 올려봅니다.
http://samplefornodejs.herokuapp.com/pushboard/

 
Posted by 머드초보
,
 
현재 폰에서 직접 받는 torrent프로그램은 리소스를 너무 많이 잡아먹어서 폰이 완전 느려지는 단점이 있는데요. 이건 remote를 통해 자신의 켜져있는 PC를 통해서 하는 것이고 나중에 다 받아진 파일을 그 PC로부터 받기만 하면 되는 재미있는 방식을 사용합니다. 앞으로 모바일 인터넷속도와 폰속도만 빨라진다면 직접 받겠지만, 아직까지는 이것을 이용하는 게 더 편할 듯 싶네요 ㅇㅇ

검색해보다가 신기한 점을 발견했는데, uTorrent(아오 그냥 u라고 쓸게요-_- 원래는 뮤μ인데...왜 이름을 이딴식으로 지었지-_-)와 bitTorrent가 있는데, 보면 모양도 똑같이 생겼고, 둘 다 똑같이 Remote프로그램이 있습니다. 게다가 같은 회사에서 만든 것 같은데, 두 개의 Remote 계정은 연결되지 않습니다. 둘 다 따로 노네요.
검색해보니 2006년도 쯤에 BitTorrent가 uTorrent를 인수를 했네요...근데, 두개의 클라이언트를 같이 키우다니...-_-
암튼 서론이 길었네요...일단 둘 다 비슷하니, uTorrent로 해볼게요.

1. 일단 torrent프로그램 uTorrent 다운

http://www.utorrent.com/intl/ko/ 
plus버전도 있는데, 유료네요. 어떤 장점이 있나 봤더니 모바일에서 손쉽게 볼 수 있도록 인코딩을 해주는 게 있는 것 같네요. 맞나...-_- 그리고 바이러스로 부터 보호해주고, 어디서든 접속할 수 있는 안전한 파일서버를 만들어 주는 것 같네요.


2. Remote 계정 설정

아이디 생성과 비밀번호 넣음과 동시에 아이디가 없는 것이면 계정을 생성해버립니다. 신기한 계정 정책...ㄷㄷ 
uTorrent에서 옵션 -> 설정 -> 원격으로 가시면 이 창이 나오는데, 체크하고 이름, 암호 입력하고 질문에 대답하면 계정설정이 됩니다. 
이상한 점을 발견했는데, 질문을 한글로 입력하면 잘 안되더라구요. 영어로 입력하세요.



3. Android에서 uTorrent Remote 설치

https://market.android.com/details?id=com.utorrent.web 
설치하고 접속하면 이름, 비번 치는 거 나오는데, 위에서 설정한 것 그대로 치면 됩니다. 
웹에서 토렌트를 추가하거나 모바일에서도 추가할 수 있는데, 어디서 추가를 하든 해당 원격PC에서 다운을 받게 됩니다.

 
4. 폰으로 다운 받기

기본적으로 폰으로 다운 받는 기능을 제공하는데요. 파일을 받으려고 하면 받기 시작하는데, 속도가 그지같이 느립니다-_- 느린 건 둘째치고, 파일 다운로드를 Android Service에서 돌리는 것 같지 않고, 그냥 Acitivity안에서 다운로드를 시도하는 것 같습니다. 뒤로가기 하면 다 받아지지도 않았는데, 받다가 끊어졌는지 다 받은 것 처럼 나옵니다. 이것만 개선하면 정말 좋을 듯 한데...
알ftp로 서버를 만들고, Android ftp프로그램으로 접속해서 받는 것이 그나마 나을 것 같긴한데, 공유기쓰는 사람들은 포트포워딩이나 DMZ설정을 통해서 해당 PC에 포트를 열어야 하구요. 물론 방화벽까지 ㅇㅇ IP가 바뀔 수도 있고, 이래저래 문제가 많네요.
그래도 FTP방식이 그나마 빠르네요.

PS. 결론은....이거 폰으로 전송하다가 시간 다가겠.......좀 참았다가 집에가서 보든지-_- 아님 좀 더 좋은 모바일을 기대하는 수밖에! 
 
Posted by 머드초보
,