Fierbase란, 구글에서 지원해주는 Cloud Service로 GCM(Google Cloud Messagine)의 발전 버전이다.

Firebase을 이용해서 모바일에 Message을 보내줄 수 있기도 하면서 다양한 서비스를 지원해준다.(대표적으로 OAuth 인증 시스템 및 저장소, 데이터 베이스 등등...)

여기서 Firebase의 인증 시스템을 사용할려고 한다.

console firebase 여기에 들어가면 Firebase의 콘솔 웹 페이지가 들어갈 수 있다.


이렇게 프로젝트를 추가해서 제공할 수 있다.


여기서 프로젝트를 제작하면, 다음과 같은 페이지로 넘어가진다.


표시한 부분인 '웹 앱에 Firebase 추가'라는걸 이용하면, 웹 페이지가 추가 할 수 있는 라이브 러리 코드가 나온다.

Authentication이라는걸 들어가면, 사용자 인증 시스템을 설정할 수 있는 페이지로 넘어가지게 된다.
여기서 '로그인 방식'을 보면, 로그인 제공 방식을 설정할 수 있다.

필자는 Google 인증 시스템을 사용할려고 한다.


이렇게 하면, 프로젝트 로그인 시스템을 구현할 수 있게 된다.

이제, 설정이 어느정도 되었다면, 다음 예시 소스처럼 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<html>
<head>
<script>
  // Firebase 초기화 
  var config = {
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: ""
  };
  firebase.initializeApp(config);
</script>
<script>
function OAuth()
{
    var provider = new firebase.auth.GoogleAuthProvider();//인증 시스템 시작.
    firebase.auth().signInWithPopup(provider).then(function(result){
        //인증 완료시 변화 코드
        alert(result.user.displayName);
    }).catch(function(error){
        //인증 실패시 변화 코드
        alert(error.message);
    });
    //인증 상태변화를 감지하는 설정.
    firebase.auth().onAuthStateChanged(function(user){
        if(user){
            //인증을 성공한 결과을 출력하기 위한 소스.
            document.getElementById('auth_state').innerHTML=user.displayName;
            document.getElementById('auth_out').style.display='inline';
        }else{
            //인증을 하지 않은 결과를 출력하기 위한 소스.
            document.getElementById('auth_state').innerHTML='off';
            document.getElementById('auth_out').style.display='none';
        }
    });
}
function OAuth_out()
{
    firebase.auth().signOut().then(function(){
        alert('Auth Out');
    }).catch(function(error){
        alert(error.message);
    });
}
</script>
</head>
<body>
    <div>
        <div>
            상태 : 
            <span id='auth_state'>off</span>
        </div>
        <div>
            <button id='auth_button' onClick='OAuth()' type='button'>Auth</button>
            <button id='auth_out' onClick='OAuth_out()' type='button' hidden>Auth Out</button>
        </div>
    </div>
</boby>
</html>


이렇게 하면, 구현이 된다.

예시를 적용한 예.
상태 : off
Posted by JunkMam
,

 원본 링크 : http://yuuxxxx.hatenablog.com/entry/2013/09/20/224801

 참조 링크 : http://jo.centis1504.net/?p=1535


 

1
2
3
4
5
6
7
8
9
10
var linkElement=document.getElementById('link');
if/*@cc_on ! @*/ false ) {
    // IE
    linkElement.fireEvent("onclick");
else {
    // Others
    var event = document.createEvent("MouseEvents");
    event.initEvent("click"falsetrue);
    linkElement.dispatchEvent(event);
}
cs


 구글 포토스를 사용하면서 불편한 것이 올렸을때, 자동으로 삭제되어야 되는 경우와 구글 드라이브를 이용해서 사용한다고 해도 paperbak이라는 것의 자체가 대량의 파일이 발생하기 때문에 문제가 된다.


 그래서 javascript를 이용한 자동장치가 필요할 것 같아서 이렇게 기록을 한다.


 document.createEvent라는 것으로 이벤트를 발생시킨다.


 문서 링크 : https://developer.mozilla.org/ko/docs/Web/API/Document/createEvent


 createEvent("MouseEvents") 라는 것 자체가 마우스에 이벤트를 일으키는 용도로 쓰인다.


 다양한 이벤트가 있는데, KeyBoardEvent도 있다.


 initEvent라는 것은 이벤트의 종류를 정의하는 것이다.


 click이벤트를 가지고 있다는 것으로, 그외 자세한건 문서 링크를 참조하면 될 것이다.


 이것은 Click이벤트를 발생시키는 것으고, click말고 mouseup등 마우스의 이벤트 전체를 가지고 있다.

Posted by JunkMam
,

 전에 올린 Youtube 영상을 가지고오는 장치를 만들었었다.


 문제는 이 장치가 모바일에서는 엄청 크게 나오는 문제점이 있으며, 조절해봤자. 방해만 준다고 판단되었다.(이거 작성하고 있을때, 이미 적용 시켰다.)

 모바일에서는 작동을 안하도록 만들기 위해서 다음과 같은 방법을 사용할려고 한다.


 다음 사이트에서 아주 간단하게 구현 되어 있는게 있어서 작성한다.


 http://stackoverflow.com/questions/11381673/detecting-a-mobile-browser


 여기서 다음과 같은 소스를 사용한다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};
cs



 여기서 나오는 navigator는 클라이언트의 정보가 일부 저장되어 있다.

 그래서 이 정보에 있는 userAgent를 이용해서 사용자의 디바이스의 정보를 가지고와서 비교한다.


 이렇게 하면, 디바이스에 따른 효과를 얻을 수 있게 된다.

Posted by JunkMam
,
Your browser does not support the HTML5 canvas tag.

 공식
 h=(물체의 높이)
 M=(물체의 폭)
 y=(물체와 시점간의 거리)
 H=(물체와 시점간의 거리에 보이는 높이)

 x축의 거리는 
 x=(y*M*cos(q))/(y+M*sin(q))

 높이는 h을 계산하는건,
 h=H(√x^2+y^2)/(√y^2+2yMsin(q)+M^2)


-SRC-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<div id="content" style="width:630px; overflow:hidden;color:#333333;">
                                <canvas id="myCanvas" width="200" height="200" style="border:1px solid #d3d3d3;">
            Your browser does not support the HTML5 canvas tag.</canvas>
 
        <script>
        
            var x,y;
            
            function draws(){
                ctx.beginPath();
 
                ctx.clearRect(0,0,c.width, c.height);
 
                calcX=((line*(heights/2)*cos)/(line+(heights/2)*sin));
 
                calcY=heights/2;
                calcY=calcY*Math.sqrt(calcX*calcX+line*line);
                calcY=calcY/Math.sqrt(Math.pow(line,2)+(((2*line)*(rec/2))*sin)+Math.pow(rec/2,2));
 
                ctx.moveTo((c.width/2)-calcX,(c.height/2)-calcY);
 
                Thetas=(-Thetas);
 
                sin=Math.sin(Thetas),cos=Math.cos(Thetas);
 
                calcX=((line*(heights/2)*cos)/(line+(heights/2)*sin));
 
                calcY=heights/2;
                calcY=calcY*Math.sqrt(calcX*calcX+line*line);
                calcY=calcY/Math.sqrt(Math.pow(line,2)+(((2*line)*(rec/2))*sin)+Math.pow(rec/2,2));
 
                ctx.lineTo((c.width/2)+calcX,(c.height/2)-calcY);
                ctx.lineTo((c.width/2)+calcX,(c.height/2));
                ctx.lineTo((c.width/2)+calcX,(c.height/2)+calcY);
 
                Thetas=(-Thetas);
                sin=Math.sin(Thetas),cos=Math.cos(Thetas);
 
                calcX=((line*(heights/2)*cos)/(line+(heights/2)*sin));
 
                calcY=heights/2;
                calcY=calcY*Math.sqrt(calcX*calcX+line*line);
                calcY=calcY/Math.sqrt(Math.pow(line,2)+(((2*line)*(rec/2))*sin)+Math.pow(rec/2,2));
 
                ctx.lineTo((c.width/2)-calcX,(c.height/2)+calcY);
                ctx.lineTo((c.width/2)-calcX,(c.height/2));
                ctx.lineTo((c.width/2)-calcX,(c.height/2)-calcY);
 
                ctx.stroke();
 
            }
 
            var c=document.getElementById("myCanvas");
            var ctx=c.getContext("2d");
            ctx.lineWidth="2";
 
            var rec=c.height;
            var line=400;
            var heights=(rec*c.height)/line;
 
            var theta=90;
            var Thetas=Math.PI/180*theta;
            var sin=Math.sin(Thetas),cos=Math.cos(Thetas);
 
            var calcX, calcY;
 
            var centX,centY;
 
            c.addEventListener("mousedown",dragstart,false);
 
            centX=0;
            centY=line;
            
            setTimeout(ani,100);
            
            function ani(){
                theta=(theta+1)%180;
                Thetas=Math.PI/180*theta;
                draws();
                setTimeout(ani,10);
            }
            
            function dragstart(event){
                x=event.x;
                y=event.y;
                event.target.removeEventListener("mousedown",dragstart,false);
                event.target.addEventListener("mousemove",drag,false);
                event.target.addEventListener("mouseup",dragend,false);
            }
 
            function drag(event){
 
                Thetas=(Math.asin(event.x/Math.sqrt(Math.pow(event.x,2)+Math.pow(event.y,2)))-Math.asin(x/Math.sqrt(Math.pow(x,2)+Math.pow(y,2))));
 
                document.getElementById("text").innerHTML=(Math.asin(event.x/Math.sqrt(Math.pow(event.x,2)+Math.pow(event.y,2)))-Math.asin(x/Math.sqrt(Math.pow(x,2)+Math.pow(y,2))));
 
                draws();
 
            }
 
            function dragend(event){
                event.target.removeEventListener("mousemove",drag,false);
                event.target.removeEventListener("mouseup",dragend,false);
                event.target.addEventListener("mousedown",dragstart,false);
            }
 
        </script>
cs



Posted by JunkMam
,