led strip(네오픽셀)로 크리스마스 트리 만들기

준비물 : 아두이노, Adafruit Neopixel, 종이, 납땜기, 전선



아두이노에서 "Adafruit Neopixel" 라이브러리 다운로드 하기 =>  스케치 > 라이브러리 포함하기 > 라이브러리 관리




생각했던 것 보다 예쁨(*________________*)


'IOT > 아듀이노' 카테고리의 다른 글

아듀이노 dc모터제어 4 wheel  (0) 2019.09.07
back light  (0) 2019.03.02
미세먼지 센서(GP2Y1010AU0F) 로 측정하기  (3) 2018.06.11
DIY-공기청정기  (0) 2018.06.01
[DIY : 센서등]인체감지센서,LED로 센서등 만들기  (0) 2018.03.31

c문법,  C를 최신언어로 마이그 하면서 자주 보게되는 것 중 하나  strcmp/strncmp



c coding >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


/*

 * test.c

 *

 *  Created on: 2018. 11. 17.

 *      Author: DIFY

 */


#include <stdio.h>

#include <string.h>

#define _CRT_SECURE_NO_WARNINGS


int main()

{

int iresult = 0;

char sResult[30];

char * sSample1 = "ABCDA";

char * sSample2 = "ABCD";

char * sSample3 = "ABCDA";


char * iSample1 = "12345";

char * iSample2 = "1234";

char * iSample3 = "12345";


   /*char*************************************************************/

iresult = strcmp( sSample1, sSample2 );

sprintf(sResult, "%d", iresult);    // %d정수를 문자열로 set

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1>sSample2) : %s\n", sSample1, sSample2, sResult);


iresult = strcmp( sSample2, sSample1 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1<sSample2) : %s\n", sSample1, sSample2,sResult);


iresult = strcmp( sSample1, sSample3 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample3:%s]=>결과값(sSample1=sSample3) : %s\n", sSample1, sSample3,sResult);


iresult = strncmp( sSample1, sSample2,4 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1,sSample2 4자리까지비교) : %s\n",sSample1, sSample2, sResult);


iresult = strncmp( sSample1, sSample2,5 );

sprintf(sResult, "%d", iresult);

printf("[sSample1:%s,sSample2:%s]=>결과값(sSample1,sSample2 5자리까지비교(ASCII 코드값)) : %s\n", sSample1, sSample2,sResult);



iresult = strncmp( sSample2, sSample1,5 );

sprintf(sResult, "%d", iresult);

printf("[sSample2:%s,sSample1:%s]=>결과값(sSample2,sSample1 5자리까지비교(ASCII 코드값)) : %s\n", sSample2, sSample1,sResult);



/*int*************************************************************/

iresult = strcmp( iSample1, iSample2 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1>iSample2) : %s\n", iSample1, iSample2, sResult);


iresult = strcmp( iSample2, iSample1 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1<iSample2) : %s\n", iSample1, iSample2,sResult);


iresult = strcmp( iSample1, iSample3 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample3:%s]=>결과값(iSample1=iSample3) : %s\n", iSample1, iSample3,sResult);


iresult = strncmp( iSample1, iSample2,4 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1,iSample2 4자리까지비교) : %s\n",iSample1, iSample2, sResult);


iresult = strncmp( iSample1, iSample2,5 );

sprintf(sResult, "%d", iresult);

printf("[iSample1:%s,iSample2:%s]=>결과값(iSample1,iSample2 5자리까지비교(ASCII 코드값)) : %s\n", iSample1, iSample2,sResult);



iresult = strncmp( iSample2, iSample1,5 );

sprintf(sResult, "%d", iresult);

printf("[iSample2:%s,iSample1:%s]=>결과값(iSample2,iSample1 5자리까지비교(ASCII 코드값)) : %s\n", iSample2, iSample1,sResult);



return 0;


}


 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

console 결과값

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1>sSample2) : 1

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1<sSample2) : -1

[sSample1:ABCDA,sSample3:ABCDA]=>결과값(sSample1=sSample3) : 0

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1,sSample2 4자리까지비교) : 0

[sSample1:ABCDA,sSample2:ABCD]=>결과값(sSample1,sSample2 5자리까지비교(ASCII 코드값)) : 65

[sSample2:ABCD,sSample1:ABCDA]=>결과값(sSample2,sSample1 5자리까지비교(ASCII 코드값)) : -65

[iSample1:12345,iSample2:1234]=>결과값(iSample1>iSample2) : 1

[iSample1:12345,iSample2:1234]=>결과값(iSample1<iSample2) : -1

[iSample1:12345,iSample3:12345]=>결과값(iSample1=iSample3) : 0

[iSample1:12345,iSample2:1234]=>결과값(iSample1,iSample2 4자리까지비교) : 0

[iSample1:12345,iSample2:1234]=>결과값(iSample1,iSample2 5자리까지비교(ASCII 코드값)) : 53

[iSample2:1234,iSample1:12345]=>결과값(iSample2,iSample1 5자리까지비교(ASCII 코드값)) : -53




서식
문자
출력 형태
c 문자
d or i 부호 있는 십진법으로 나타난 정수
e 지수 표기법(Scientific notation) 으로 출력하되, e 문자를 이용한다.
E 지수 표기법(Scientific notation) 으로 출력하되, E 문자를 이용한다.
f 십진법으로 나타낸 부동 소수점 수
g %e나 %f 보다 간략하게 출력
G %E나 %f 보다 간략하게 출력
o 부호 있는 팔진수
s 문자열
u 부호없는 십진법으로 나타낸 정수
x 부호없는 16 진법으로 나타낸 정수 (소문자 사용)
X 부호없는 16 진법으로 나타낸 정수 (대문자 사용)
p 포인터 주소
n 아무것도 출력하지 않는다. 그 대신, 인자로 부호 있는 int 형을 가리키는 포인터를 전달해야 되는데, 여기에 현재까지 쓰여진 문자 수가 저장된다.
(참고, eclipse에서 c 사용하기, http://blog.moramcnt.com/?p=1272 )



C#에서 mariadb 사용하기

https://dev.mysql.com/downloads/connector/net/

Download Connector/NET(mysql-connector-net-8.0.13.msi)

mysql-connector-net-8.0.13.msi



 

C#프로젝트 [참조]에 라이브러리를 추가한다.(1개 : MySql.Data.dll)

C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.13\Assemblies\v4.5.2\MySql.Data.dll




<dbconnection class>에서 아래 라이브러리 이용하여 커넥션 클래스 구성.

오라클,msSql, mariadb 모두 비슷한 패턴임.

------------------------------------------------

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data;

using MySql.Data.MySqlClient;


namespace testWebApplication1

{

    public class MariaDbAccess

    {


        #region 멤버변수


        private MySqlConnection oCnn = null;

        /// <summary>

        /// DB 연결 스트링

        /// </summary>

        private string _connectionString = "SERVER=서버;DATABASE=데이타베이스명;UID=아이디;PASSWORD=패스워드;";


------------------------------------------------


'프로그래밍 > c#' 카테고리의 다른 글

WebBrowser이용한 스크린스크래핑  (0) 2018.05.09
WebBrowser.DocumentText 한글깨짐  (0) 2018.05.07
using MySqlConnector  (0) 2018.05.07

Open Api 를 이용해서 Request & Response 된 데이타를 

테이블에 저장하도록 한다.

Schema구성


>kakao open api 분석

>스키마구성



>mysql table 스크립트

-- <table SCHEMA> START-----------------------

CREATE TABLE `requestdata` (
`SQSeq` bigint(20) NOT NULL AUTO_INCREMENT,
`SearchKind` varchar(20) NOT NULL DEFAULT 'WEB',
`Query` varchar(100) NOT NULL,
`SearchDate` date NOT NULL,
PRIMARY KEY (`SQSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `responsedata` (
`SQSeq` bigint(20) NOT NULL,
`SubSeq` bigint(20) NOT NULL,
`Title` varchar(300) NOT NULL DEFAULT 'ETC',
`Contents` varchar(4000) DEFAULT NULL,
`Url` varchar(1000) DEFAULT NULL,
`Thumbnail_url` varchar(1000) DEFAULT NULL,
`Authors` varchar(1000) DEFAULT NULL,
`Price` int(11) DEFAULT NULL,
`Width` int(11) DEFAULT NULL,
`Height` int(11) DEFAULT NULL,
`Category` int(11) DEFAULT NULL,
`Datetime` date DEFAULT NULL,
`Etc` varchar(200) DEFAULT NULL,
PRIMARY KEY (`SQSeq`,`SubSeq`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- <table SCHEMA> END-----------------------



>스토어 프로시저로 등록/삭제

-- [START]요청 REQUESTDATA INSERT----------------

DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_INSERT //

CREATE PROCEDURE SP_REQUESTDATA_INSERT
(
IN InSearchKind varchar(20),
IN InQuery varchar(100),
OUT NewSQSeq bigint(20)
)

BEGIN
INSERT INTO requestdata
(
SearchKind
,Query
,SearchDate
)
VALUES
(
InSearchKind,
InQuery,
sysdate()
);

-- Auto Increment 값 조회
SELECT LAST_INSERT_ID()
INTO NewSQSeq; -- OUT 파라메터 담기

END//

DELIMITER ;
-- [END]요청 REQUESTDATA INSERT------------------


-- [START] 요청/결과 삭제 SP_REQUESTDATA_DELETE----
DELIMITER //

DROP PROCEDURE IF EXISTS SP_REQUESTDATA_DELETE //

CREATE PROCEDURE SP_REQUESTDATA_DELETE
(
IN InSQSeq bigint(20)
)

BEGIN

declare iResult bigint(20);
set iResult = 0;

DELETE FROM requestdata
WHERE SQSeq = InSQSeq;

DELETE FROM responsedata
WHERE SQSeq = InSQSeq;

END//

DELIMITER ;
-- [END]요청/결과 삭제 SP_REQUESTDATA_DELETE-------


-- [START]결과 SP_RESPONSEDATA_INSERT------------
DELIMITER //

DROP PROCEDURE IF EXISTS SP_RESPONSEDATA_INSERT //

CREATE PROCEDURE SP_RESPONSEDATA_INSERT
(
IN InSQSeq   bigint(20)
,IN InTitle   varchar(300)
,IN InContents    varchar(4000)
,IN InUrl varchar(1000)
,IN InThumbnail_url   varchar(1000)
,IN InAuthors varchar(1000)
,IN InPrice   int(11)
,IN InWidth   int(11)
,IN InHeight  int(11)
,IN InCategory    int(11)
,IN InDatetime    varchar(100)
,IN InEtc varchar(200)
,OUT OutResult bigint(20)
)

BEGIN

declare NewSubSeq bigint(20) default(0);

SELECT
IFNULL(MAX(SUBSEQ),0) + 1 into NewSubSeq
FROM RESPONSEDATA
WHERE SQSeq = InSQSeq;
SET OutResult = NewSubSeq;

INSERT INTO responsedata
(
SQSeq 
,SubSeq   
,Title    
,Contents 
,Url  
,Thumbnail_url    
,Authors  
,Price    
,Width    
,Height   
,Category 
,Datetime 
,Etc  
)
values
(
InSQSeq   
,NewSubSeq
,InTitle  
,InContents   
,InUrl    
,InThumbnail_url  
,InAuthors    
,InPrice  
,InWidth  
,InHeight 
,InCategory   
,date(InDatetime) 
,InEtc    
);


END//

DELIMITER ;
-- [END]결과 SP_RESPONSEDATA_INSERT--------------



>프로시저실행해서 등록하기


call SP_REQUESTDATA_INSERT('Book','삶의철학산책',@NewSQSeq);
select @NewSQSeq;

call SP_RESPONSEDATA_INSERT(1,'드 보통의 삶의 철학산책','복잡하고 힘겨운 삶을 유쾌하게 만드는 삶의 거장들이 알려주는 행복의 철학. 인기없음, 가난, 좌절, 부당함, 실연, 고통에 대한 허브 치료와도 같은 유쾌한 위안을 한권의 책으로 엮었다.','http://book.daum.net/detail/book.do?bookid=KOR9788984980624','http://t1.daumcdn.net/thumb/R72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FKOR9788984980624%3Fmoddttm=20160223080929','알랭 드 보통',17000,0,0,5,'2002-04-25T00:00:00.000+09:00','8984980625 9788984980624',@OutResult);

select @OutResult;

call SP_RESPONSEDATA_INSERT(1,'고대 로마+한강역사문화탐사+삶의철학산책','&#39;고대 문명 시리즈&#39; 두 번째 권으로 고대 로마를 찾아간다. 로마의 사회, 정치, 문화, 예술의 다양한 면모를 가능한 명료하고 직접적으로 기술하여 로마를 직접 체험하는 느낌을 가질 수...','http://book.daum.net/detail/book.do?bookid=BOK00000039062LI','http://t1.daumcdn.net/thumb/P72x100/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbook%2FBOK00000039062LI%3Fmoddttm=20150609170927','안나 마리아 리베라티',95000,0,0,0,'2003-07-20T00:00:00.000+09:00','0004953282 0100004953286',@OutResult);

response된data.txt




'프로그래밍 > PHP' 카테고리의 다른 글

kanboard로 프로젝트 관리하기  (0) 2020.05.26
WAMP 설치  (0) 2020.05.26
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05

다움API 3번째 도서검색.

이미지,블로그,웹,도서,푸시알림까지 되면  

실제 필요한 물건을 만들수 있지 않을까..... 생각아 좀더 나거라~


오픈API 사용량에 관계없이 무제한으로 쓸수있는지 궁금해지네.... 

스크래핑 하지 않고 이렇게 API호출해서 받으니 쉽고 빠르고 좋다.


testpage 도서검색) http://doitforyou.co.kr/test/curl_daum_search_book.php

testpage 웹검색) http://doitforyou.co.kr/test/curl_daum_search_web.php

testpage 이미지검색) http://doitforyou.co.kr/test/curl_daum_search_image.php


<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/book';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 50,
'query' => 'PHP'
,
'category' => 33
));

$res = request($path, $params, $content_type);

//header('Content-Type: application/' . $content_type . '; charset=utf-8');
// echo $res;
//echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환
// var_dump( $dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
echo "<br>";
echo "tCnt_totalcnt:".$tCount . "/" ."iCnt_documents:".$iCnt;
echo "<br>";

for ($i=0; $i < $iCnt; $i++)
{
echo "<p>";

echo "title:".$dt->documents[$i]->title."<br>";
echo "contents:".$dt->documents[$i]->contents."<br>";
echo "url:".$dt->documents[$i]->url."<br>";
echo "isbn:".$dt->documents[$i]->isbn."<br>";

$iCntAuthor = 0;
$iCntAuthor = count($dt->documents[$i]->authors);

for($z=0; $z < $iCntAuthor; $z++)
{
if($z==0){
echo "authors:";
}
echo $dt->documents[$i]->authors[$z];
if($z <> ($iCntAuthor-1) )
{
echo ",";
};
}

echo "</p>";

}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

WAMP 설치  (0) 2020.05.26
Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31

curl로 받은 데이터로 html 형식으로 표현할때 아래에서

header('Content-Type: application/' . $content_type . '; charset=utf-8');

주석처리 해야한다.


아래코드는 

keyword로 검색한 후 결과값으로 이미지를 화면에 보여준다.

thumbnail_url 로 img src에 세팅하면....

속도가 아주~ 빠르다. 내가 검색한 데이타의 image가 이렇게 빠르게 보여지는게 놀랍다고 느껴진다.


json object 개수를 셀때 count를 이용해서 확인하고 

for문으로 image 를 그리고 있다. count($dt->documents)




<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title> image 검색하기 </title>
</head>
<body>

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {KAKAORESTFULAPIKEY}');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
//print_r(curl_getinfo($curl_session));
curl_close($curl_session);
return $return_data;
}
}


$path = '/v2/search/image';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1, //조회건수가 많으면 page수 변경하며 추가조회가능
'size' => 20, //한 페이지에 조회되는 데이터 건수
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

// header('Content-Type: application/' . $content_type . '; charset=utf-8');
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

//var_dump($dt);

$tCount = $dt->meta->total_count;
$iCnt = count($dt->documents);
//echo "\r\n";
//echo "tCount:".$tCount;
//echo "icnt:". count($dt->documents);
for ($i=0; $i < $iCnt; $i++)
{
echo "<img src='".$dt->documents[$i]->thumbnail_url."'/>";
if((($i+1)%10 == 0 ) && ($i != 0)){
echo "<br>";
};
//echo "\r\n";
// echo $dt->documents[$i]->doc_url;
//echo "\r\n";
}
?>

</body>
</html>



'프로그래밍 > PHP' 카테고리의 다른 글

Open Api Request / Response Schema구성&실행  (0) 2018.08.19
curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api사용하기  (0) 2018.08.05
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26

php curl을 이용하여 카카오 오픈api 검색엔진 사용하기


아래 예제는 다움포탈에서 doitforyou.co.kr로 검색했을경우 블로그 검색데이타(json type)를 가져와서

블로그title, 블로그url를 찍어보는 예제이다.


API는 아래 $path 에 따라서 검색되는 데이타가 달라진다.


$path = '/v2/search/blog';  --블로그

$path = '/v2/search/web';   --웹

$path = '/v2/local/search/address'; --주소


이 API를 이용해서 아이디어가 떠오른다면 APP또는 다른 서비스로 발전할 수 있을것 같다.


출처) https://devtalk.kakao.com .

 json 파싱부분 수정하더 정확한 url잊음

<?php
function request($path, $query, $content_type = 'json')
{
$api_server = 'https://dapi.kakao.com';
$headers = array('Authorization: KakaoAK {APIKEYAPIKEYAPIKEY} ');
$opts = array(
CURLOPT_URL => $api_server . $path . '.' . $content_type . '?' . $query,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSLVERSION => 1,
CURLOPT_HEADER => false,
CURLOPT_HTTPHEADER => $headers
);

$curl_session = curl_init();
curl_setopt_array($curl_session, $opts);
$return_data = curl_exec($curl_session);

if (curl_errno($curl_session)) {
throw new Exception(curl_error($curl_session));
} else {
curl_close($curl_session);
return $return_data;
}
}

$path = '/v2/search/blog';
$content_type = 'json'; // json or xml
$params = http_build_query(array(
'page' => 1,
'size' => 10,
'query' => 'doitforyou.co.kr'
));

$res = request($path, $params, $content_type);

header('Content-Type: application/' . $content_type . '; charset=utf-8');
echo $res;
//var_dump($res);
$dt = json_decode($res); //json data type => php object로 변환
//json_encode : php object/array => json data type으로 변환

$tCount = $dt->meta->total_count;
echo "\r\n";
echo "tCount:".$tCount;
echo "\r\n";

for ($i=0; $i < $tCount; $i++)
{
echo $dt->documents[$i]->title;
echo "\r\n";
echo $dt->documents[$i]->url;
echo "\r\n";
}
?>


'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 도서검색  (0) 2018.08.10
curl kakao open api 이미지검색하기  (0) 2018.08.06
php CURL 사용하기  (0) 2018.07.31
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02

Windows에서 php CURL 사용하기

오픈API를 사용하기 위해서 php에서 CURL이 동작하도록 설정한다..

 

Step1) C:\windows\php.ini 의 파일 수정

extension=php_curl.dll  사용하도록 수정

Step2) C:\APMorg\php 폴더의

libeay32.dll, ssleay32.dll  C:\Windows\System32 폴더로 복사

Step3) 윈도우 서비스의 아파치를 재시작 한다.

       아파치 환경에서 php를 구동하기 위해서 php.ini정보를 읽어 서비스 하기 때문에 재 기동 해야함.





phpinfo.php를 통해 반영된것 확인 가능하다.

curl

cURL supportenabled
cURL Information7.54.1


또는 아래 코드로도 확인가능하다.


<?php

if(extension_loaded("curl")){

echo "cUrl extension is loaded";

}else{

 echo "cUrl extension is not available";

}

?>


로컬 개발PC : 윈도우8 apm세팅

웹호스팅 중인 : doitforyou.co.kr 의 curl정보 확인. 

curl

cURL supportenabled
cURL Information7.29.0
Age3

 

'프로그래밍 > PHP' 카테고리의 다른 글

curl kakao open api 이미지검색하기  (0) 2018.08.06
curl kakao open api사용하기  (0) 2018.08.05
Javascript로 Facebook로그인  (0) 2018.05.26
php 패스워드 암호화 bcript  (0) 2018.05.02
unlink(=delete) 메소드 이용하기  (0) 2018.04.22

오라클 쿼리중 

조회하려는 row(s)단위로 lock설정이가능한데,

"FOR UPDATE 구문"을 사용한다



select * from employees

where empno = 1234

for update nowait;


해당 empno=1234에 lock을 획득하지 못하면 ORA-00054로 에러발생시키고 종료한다.

현재 해당 rows가 lock상태라고 이해하면 되겠다.

(ORA-00054:자원이 사용중이고,NOWAIT가 지정되어 있음)


select * from employees

where empno = 1234

for update wait 10  --(10 seconds동안 lock잡기위해 대기);


10초이후도 lock을 얻지 못하면 ORA-00054 에러 발생시키고 종료된다.


아래 출처의 내용을 보게되면

ORA-00054에러 발생시 계속해서 try하는 로직이 있다.

반드시 수행되어야 하는 내용이 있으면 이렇게 반복적인 작업을 진행하더라고 진행되도록 처리한다.

(예, 프로세스 처리를 위해 중요한 key, 값이 되는 것의 채번/값수정 할때 사용할 수 있겠다.)



예)로직수행시 기lock이 있을경우 sleep후 재시도하여 처리

샘플)출처: http://www.java2s.com/Tutorial/Oracle/0500__Cursor/CursorFORUPDATENOWAIT.htm

'DataBase > Oracle' 카테고리의 다른 글

ORA-01403 no data found, ORA-01422 TOO_MANY_ROWS  (0) 2018.12.16
Oracle Error Code description  (0) 2018.04.20

1개월간 공부한 R에 사용방법 정리.


R에 내장된 데이터 

Iris, BOD

 

 

데이터프레임(dataframe)구조 파악하기 => str(iris)

아래는 150개의 관측치(observation)가 있고 5개의 변수가 있다는 정보를 보여준다.

4개의 변수는 number형태이고

1개의 변수는 factor이다.

 

> str(iris)

'data.frame': 150 obs. of  5 variables:

 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...

 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...

 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...

 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...

 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...


데이터 일부확인하기

상위5하위5개 보기

> head(iris)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1          5.1         3.5          1.4         0.2  setosa

2          4.9         3.0          1.4         0.2  setosa

3          4.7         3.2          1.3         0.2  setosa

4          4.6         3.1          1.5         0.2  setosa

5          5.0         3.6          1.4         0.2  setosa

6          5.4         3.9          1.7         0.4  setosa

> tail(iris)

    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species

145          6.7         3.3          5.7         2.5 virginica

146          6.7         3.0          5.2         2.3 virginica

147          6.3         2.5          5.0         1.9 virginica

148          6.5         3.0          5.2         2.0 virginica

149          6.2         3.4          5.4         2.3 virginica

150          5.9         3.0          5.1         1.8 virginica


데이터에 대한 summary로 자료의 특성 파악하기

> summary(iris)

  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  

 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  

 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  

 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  

 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  

 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  

 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500     


  

cbind() 함수를 사용해 두 데이터를 병합한 데이터프레임 생성해보기

먼저 행의 개수가(observation) 일치한 데이터프레임이어야 합니다.

내장 데이터프레임 BOD, iris가공해서 진행

 

> iris2 <- head(iris)


> str(BOD)

'data.frame': 6 obs. of  2 variables:

 $ Time  : num  1 2 3 4 5 7

 $ demand: num  8.3 10.3 19 16 15.6 19.8

 - attr(*, "reference")= chr "A1.4, p. 270"

> str(iris2)

'data.frame': 6 obs. of  5 variables:

 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4

 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9

 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7

 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4

 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1


> iris2BOD <- cbind(iris2, BOD)

> show(iris2BOD)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Time demand

1          5.1         3.5          1.4         0.2  setosa    1    8.3

2          4.9         3.0          1.4         0.2  setosa    2   10.3

3          4.7         3.2          1.3         0.2  setosa    3   19.0

4          4.6         3.1          1.5         0.2  setosa    4   16.0

5          5.0         3.6          1.4         0.2  setosa    5   15.6

6          5.4         3.9          1.7         0.4  setosa    7   19.8




# 데이터 정비

#iris2BOD 7개의 변수가 있는 데이터를  5개의 변수로 해서 새데이타프레임 생성

#즉, Sepal.Length, Sepal.Width, Species, Time, demand변수를 가진 iris2BOD2 데이터프레임생성하기


> iris2BOD2 <- iris2BOD[,c("Sepal.Length", "Sepal.Width", "Species", "Time", "demand")]

> show(iris2BOD2)

  Sepal.Length Sepal.Width Species Time demand

1          5.1         3.5  setosa    1    8.3

2          4.9         3.0  setosa    2   10.3

3          4.7         3.2  setosa    3   19.0

4          4.6         3.1  setosa    4   16.0

5          5.0         3.6  setosa    5   15.6

6          5.4         3.9  setosa    7   19.8




패키지 사용시

> library(ggplot2)

로 라이브러리에 추가하고 진행.




'빅데이타 > DATA분석' 카테고리의 다른 글

머신러닝 로드맵  (2) 2020.08.04

+ Recent posts