SyntaxHighlighter.all();

json 모듈을 사용하여 문자열을 dictionary로 변환할 수 있습니다.

문자열은 json 형식을 만족해야 합니다.

 

다만, 변환하는 과정에서 double quotes error가 발생하는 경우가 있습니다. 

=> json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes

 

Expecting property name enclosed in double quotes 오류

 

해당 오류는 json 모듈이 큰 따옴표만 인식하기 때문에 발생합니다.

replace 함수를 통해 모든 작은 따옴표를 큰 따옴표로 변환해주면 해결할 수 있습니다. 

 

반응형

'Python' 카테고리의 다른 글

[Python] pd.read_csv() "Unnamed : 0" column 제거  (0) 2020.12.22

pandas.DataF

rame.read_csv() 함수를 사용하여 csv 파일을 읽어올 때, 의도하지 않은 컬럼이 추가되는 상황이 있습니다.


이러한 컬럼은 대체로 "Unnamed: 0" 컬럼으로 나타납니다.

아래 그림은 예시입니다.

 

Unnamed : 0 column

해당 컬럼을 제거하는 방법은 크게 두 가지가 있습니다.

 

1. read_csv 함수의 옵션을 설정

2. Unnamed 컬럼을 제거

 

코드는 다음과 같습니다.

 

 

해당 코드를 사용하면 아래 그림처럼 Unnamed 컬럼을 제거할 수 있습니다.

 

Unnamed 컬럼 제거 적용

 

반응형

'Python' 카테고리의 다른 글

[python] string을 dictionary로 변환하기 (String to dictionary)  (0) 2020.12.22

피보나치 수열

F(n) = F(n-1) + F(n-2)

 

1. recursive를 이용한 구현

재귀호출을 이용하면 간단하게 구현할 수 있지만, n이 커질수록 연산량이 크게 증가한다. 

시간복잡도 : O(2^n) 

 

2. memoization을 이용한 구현

연산 결과를 저장하는 배열이 필요하지만, 재귀적 구현에 비해 월등히 빠른 속도를 낼 수 있다.

시간복잡도 : O(n) 

3. 간단한 성능 비교

* 15에 대한 피보나치 수를 구하는 실험 진행

recursive 기반 알고리즘은 180,428 cycle이 소요됨

memoization 기반 알고리즘은 6148 cycle이 소요됨

 

memoization 기법이 약 2900% 효율적

* CPU 성능이나 주어진 수에 따라 차이가 있을 수 있습니다.

반응형

1) 1은 소수가 아님

2) 소수인지 판단할 수 param을 2부터 param-1까지 나누어봄

    한번이라도 나머지가 0이면 param은 소수가 아님 

 

반응형

greatest common divisor algorithm in C

 

>> (u, v)

1) u가 v보다 크면 v와 u를 바꾼다. (음수 방지)

2) u = u - v

3) u == 0 이면, v가 최대공약수

   아니라면 1)로 돌아감

 

 

반응형

how to connect from outside internet

외부 인터넷에서 내 로컬에서 동작하는 geth에 접속하는 방법입니다. 

 

[geth 실행]

geth.exe --nodiscover --identity "etherPrivate" --datadir "C:\Program Files\Geth\mydata" --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "*" --networkid 88 --rpcapi "admin,db,eth,net,web3,debug,miner,shh,txpool,personal" --allow-insecure-unlock console

cmd에서 geth의 위치를 찾아갑니다. 이후 위 명령어를 이용하여 geth를 실행합니다. 

rpcaddr을  0.0.0.0:8545로 설정하여 모든 IP에서 접근할 수 있도록 합니다.

8545 포트는 예시이며, 사용자 환경에서 접속할 수 있는 적절한 포트번호를 부여하면 됩니다.

* geth는 반드시 관리자 권한으로 실행해야 합니다.

 

[geth attach]

geth attach rpc:http://0.0.0.0:8545

다른 터미널 창에서 geth에 접속하는 방법입니다.

마찬가지로 사용자 환경에서 생성한 포트번호를 대입합니다. 

 

geth attach

해당 콘솔에서 miner.start()와 같은 geth 명령어를 원격으로 실행할 수 있습니다.

 

[MetaMask를 통한 Remix 연결]

 

MetaMask에서 사용자 정의 RPC를 선택합니다.

 

새로운 네트워크 설정에서 내 PC의 외부 IP와 geth의 포트번호를 입력합니다.

공유기가 할당한 사설 네트워크 (192.168...)은 별도의 포트 포워딩을 해줘야만 외부에서 접속할 수 있습니다.

 

iptime 공유기는 192.168.0.1로 접속하면 확인할 수 있습니다.

192.168.0.1

 

MetaMask -> 새 네트워크 -> 새로운 RPC URL에 내 PC의 외부 IP주소를 입력합니다.

(아래 URL은 예시입니다)

 

Remix에서 Enviroment를 Web3 Provider로 설정합니다. 

 

 

확인창이 뜨는데 확인을 누르시면 아래 창이 나타납니다.

여기에 내 외부 IP주소와 geth의 포트 주소를 넣어줍니다.

(아래 IP는 예시입니다)

 

 

이제 내 컴퓨터에서 동작 중인 이더리움 사설 네트워크에 외부 인터넷(LTE 등)에서 접속이 가능합니다.

 

[포트 포워딩]

공유기를 사용하는 경우 포트포워딩을 해주어야 외부 접속자가 사설망(공유기 환경) 내부의 내 pc를 찾아올 수 있습니다.

 

iptime의 경우 192.168.0.1에서 설정 가능합니다.

 

포트포워드 메뉴

 

새 규칙을 추가합니다. 외부 포트와 내부 포트를 내 geth 환경과 동일하게 설정합니다.

반드시 적용 버튼을 눌러 세팅을 저장합니다.

 

* 가정에서 사용하는 일부 인터넷 제공사는 포트 포워드를 지원하지 않습니다.

 

설정을 마치면 외부망을 통해 내 로컬에서 동작하는 geth에 접속할 수 있습니다. 

반응형

'블록체인 > DApp' 카테고리의 다른 글

[DApp] authentication needed: password or unlock 해결 방법  (0) 2019.12.07

remix error

이더리움에서 트랜잭션을 보낼 때 발생하는 오류입니다. 

트랜잭션을 보내는 계좌의 권한을 주면 해결할 수 있습니다.

 

[javascript 환경에서 해결 방법]

function unlockAccount() {
	web3.eth.defaultAccount = "<account>";
	web3.personal.unlockAccount("<account>", "<password>", function (error, result) {
		console.log(result); // true & false 
	});
}

function sampleSmartContract () {
	unlockAccount();
    // your smart contract code...
}

[geth 환경에서 해결 방법]

personal.unlockAccount(eth.accounts[0]) // send account.

eth.accounts[0]는 geth에 등록된 첫 번째 계좌를 반환합니다.

트랜잭션을 발생시키는 계좌를 넣으면 됩니다.

 

geth

 

반응형

'블록체인 > DApp' 카테고리의 다른 글

[DApp] geth private network 외부 접속 방법  (0) 2019.12.09

안드로이드의 webview를 이용한 하이브리드앱에서는 웹의 alert메세지가 나타나지 않습니다.

(alert은 브라우저가 지원하는 기능)

 

 

따라서 setWebChromeClient(new WebChromeClient()) 설정을 추가해야 합니다.

이외에 코드를 변경할 필요는 없습니다.

1
2
3
4
5
6
private WebView mWebView; // webview
private WebSettings mWebSettings; // setting
mWebSettings.setJavaScriptEnabled(true); // javascript 허용
 
// chrome client 설정을 통해 alert가 나타도록 함
mWebView.setWebChromeClient(new WebChromeClient()); 

 

위 설정을 추가하면 안드로이드 webview에서 alert창이 잘 나타는 것을 확인했습니다.

반응형

Convert a Unix timestamp to time in JavaScript

일반적으로 TIMESTAMP값은 Unix 시간이기 때문에 사람이 읽을 수 없습니다.

따라서 적절한 변환을 해주어야 합니다.

 

1
2
const timestamp = 1575529698
var myDate = new Date(timestamp * 1000);

ms단위이기 때문에 1000을 곱해줍니다.

 

[출력결과]

alert(myDate)

 

Date 객체를 사용하면 다양한 방법으로 날짜를 표현할 수 있습니다.

1
2
3
4
5
6
7
8
getFullYear()     // yead
getMonth()        // 실제 달보다 -1 작습니다. 0월 ~ 11월 반환
getDate()         // day 
getHours()        // hour
getMinutes()      // minute
getSeconds()      // seconds
getMilliseconds() // ms
getDay()          // 요일 0(일) ~ 6(토)

 

Date 함수를 이용하여 원하는 날짜 형식을 출력할 수 있습니다.

1
2
var date = myDate.getFullYear() + "-" + (myDate.getMonth()+1+ "-" + myDate.getDate() +
" " + myDate.getHours() + "h" + myDate.getMinutes() + "m";

 

[출력결과]

console.log()

 

더 자세한 정보입니다.

 

Date

Date 생성자는 시간의 특정 지점을 나타내는 Date 객체를 생성합니다.

developer.mozilla.org

 

반응형

enter키로 버튼클릭 이벤트를 발생시키는 방법입니다. 

 

 

pw의 textBox에 포커스가 있을 때, enter을 입력하면 ok버튼이 클릭됩니다(submit).

 

1
2
3
4
5
6
7
8
9
10
11
private void Btn_LoginForm_Ok_Click(object sender, EventArgs e)
{
    MessageBox.Show("enter!");
    this.Close();
}
 
private void Tb_Loginform_Pw_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
        Btn_LoginForm_Ok_Click(sender, e);
}
 
 
반응형

+ Recent posts