[gnuboard] editor로 작성한 글에서 img만 뽑아오기

2015. 2. 3. 16:14 from Dev/etc

그누보드 이용할 때, 에디터를 이용하지 않고 이미지를 따로 업로드한 경우는 그누보드의 모든 기능을 다 쓸 수 있습니다. 썸네일 작성이라든가, latest를 이용해서 최신글을 뽑아올 때라든가 말이지요.


그런데 DHTML편집기를 이용한 경우에는 wr_content의 소스에서 이미지를 따로 떼어와서 작업했었죠. 그런데 오늘 '어, 그거 함수 있어'하는 얘기를 들었습니다.


common.lib.php에 있는 get_editor_image 라는 녀석입니다.


$arrImgs = get_editor_image($list[$i]['wr_content'], false);


이런식으로 DHTML편집기로 작성된 wr_content를 넘겨주면 정규식을 이용해서 img 소스를 추출해줍니다. 두번째 인수를 false로 하면 url만, true로 하면 img tag 자체를 리턴해줍니다.


preg_match_all을 이용하기 때문에 리턴값은 array이고, 여기서 골라서 이용하면 됩니다.

Posted by banasun :

[php] openweathermap.org의 API를 이용한 현재 기상정보 보여주기

2015. 1. 29. 15:43 from Dev/php

예전에 openweathermap.org에서 제공하는 기상 정보를 이용하는 방법에 대해서 간단하게 올렸었습니다. (링크)

무료로 이용할 수 있는 날씨 정보 API가 별로 없는데, 이곳 서비스는 안정적으로 잘 이용하고 있습니다.

오늘은 간단하게 객체화 시킨 소스를 보여드리겠습니다. 언제나 그렇듯이 잘못된 부분이나 더 개선할 부분이 있으면 알려주세요. ^^



class Weather {

	const API_URL_CURRENT = "http://api.openweathermap.org/data/2.5/weather?lat=37.56826&lon=126.977829&units=metric&APPID=<발급받은 아이디>";
	const API_URL_FORECAST = "http://api.openweathermap.org/data/2.5/forecast/daily?lat=37.56826&lon=126.977829&cnt=5&units=metric&APPID=<역시 발급받은 아이디>";

	public static function get_current_weather() {
		$c = curl_init(self::API_URL_CURRENT);
		$options = array(
			CURLOPT_HEADER => false,
			CURLOPT_RETURNTRANSFER => true
		);
		curl_setopt_array($c, $options);
		$data = curl_exec($c);
		curl_close($c);
		
		if (isset($data) && $data) {
			$data_obj = json_decode($data);
			$result = array(
				'current_temp' => $data_obj->main->temp,
				'temp_min' => $data_obj->main->temp_min,
				'temp_max' => $data_obj->main->temp_max,
				'desc' => $data_obj->weather[0]->main,
				'icon' => "http://openweathermap.org/img/w/{$data_obj->weather[0]->icon}.png",
				'status' => 'ok'
			);
			return $result;
		}
	}
	
	public static function get_weather_forecast() {
		$c = curl_init(self::API_URL_FORECAST);
		$options = array(
			CURLOPT_HEADER => false,
			CURLOPT_RETURNTRANSFER => true
		);
		curl_setopt_array($c, $options);
		$data = curl_exec($c);
		curl_close($c);
		
		return json_decode($data);
	}
}

$w = Weather::get_current_weather();
echo "現在 " . number_format($w['current_temp'], 1) . "℃";


php 파일을 만드신 다음에 원하는 곳에 include만 해주면 간단한 날씨 아이콘과 현재 기온이 그림처럼 출력됩니다.

위 예제는 서울을 기준으로 했으니 다른 도시라면 lat, lon을 바꾸어주셔야 합니다.


이미지 아이콘도 $w['icon']으로 이용하실 수 있습니다만, 이쁜 아이콘이 아니라 pass. ㅋㅋ



여기에 가시면 오픈소스 날씨 관련 아이콘이 있습니다

erikflowers/weather-icons



기상 예측에 대해서도 일단 정보를 가져오는 부분은 코딩을 해 놓았습니다. json 객체이니 보시고 입맛에 맞게 이용하시면 됩니다.

Posted by banasun :

MySQL-python 설치하기 (Ubuntu)

2015. 1. 21. 17:53 from Dev/python

Ubuntu에서 mysql-python 설치하는 방법입니다. 아무것도 깔려있지 않은 깨끗한(?) 서버 상태일 때를 가정한 것입니다.



sudo apt-get install python-pip
sudo apt-get install python-dev
sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python

pip이 설치되어 있다면 1행은 건너 뛰셔도 됩니다.

Posted by banasun :

mongodb admin tools - Robomongo

2015. 1. 9. 18:50 from Dev/mongodb

새해를 맞아 새 프로젝트를 진행하고 있는데, 작년부터 고민고민하다 이번 프로젝트는 mongodb로 진행하기로 하였습니다. 따져보고 따져보다, 아무래도 아이템 진행이 되면서 기능 추가나 요구사항 변경 등이 계속 될 것 같아(agile development 라고 쓰고 hell 이라고 읽는..) 그동안 눈팅만 하던 mongodb를 실제로 이용해보고 있습니다.

실제 이용하고 해본지는 얼마 안되지만, 그동안 mongodb 경험으로 느낌을 써보자면.. query문 만드느라 고생합니다. 대충 맘대로 INSERT, SELECT 하고, 조금 복잡해지면 stored procedure 정도? 로 때우다가 query 조건 정의하고 조건들을 구조화하고 하다 보니 장난이 아니네요. 익숙해지면 좀 되려나..

개인적으로는 새로운 걸 공부할 때는 밤 새워 가면서 해도 재미있어하는 성격인지라, mongodb 공부는 재미 있습니다. 오랫만에 밤늦게까지 가지고 놀아보고 있네요. ㅋㅋ 비즈니스 로직은 python으로 짜고 있는데 python + mongodb 조합도 좋아보이네요.

이제 슬슬 본격적으로 코딩을 하기 전에, 오늘은 mongodb admin tool들을 몇 가지 둘러보았습니다. 여태까지는 크게 손대지 않아서 genghis로 때우고 있었는데 ( 사실 이름이 멋있어서. 징기스칸이 생각이 나서 냉큼 설치해 보았습니다 ), web based라 그런지 레코드가 슬슬 늘어나면서는 여는 게 점점 느려지더군요. 그리고 admin 기능은 좀 제한적이기도 하고.. 설치가 간편하기 때문에(따로 설치라고 할 것도 없지요) 써보았는데 조금 한계가 있어서 mongodb 홈페이지에서 툴들을 살펴보던 중에, Robomongo라는 app이 눈에 띄더군요.(http://robomongo.org/)


genghis 실행화면

< genghis 실행화면 - HTML5로 깔끔하게 내용만(!) 보여주고, 인터페이스도 단순한 맛이 있습니다 >


Robomongo는 실제로 management tool을 표방하고 있기 때문에 기능도 다양하고, mongo shell 기능도 바로바로 사용할 수 있습니다. 몇 시간 안써보았지만 오늘 이것저것 깔아본 툴 중에서는 가장 나은 것 같습니다.


< Robomongo - Mac용 실행화면입니다 >

windows용, mac용, linux용 모두 배포되고 있습니다. 조금 더 써보고 시간날 때 사용팁도 써보도록 하겠습니다.

Posted by banasun :

[python] 1시간 전 datetime 구하기

2015. 1. 7. 08:46 from Dev/python

지난번 포스팅에서 어제, 그저께 날짜를 datetime 포맷으로 구하여 보았습니다: (date format을 datetime format으로)

이번에는 짧게, 1시간 전은 어떻게 구할까요?



import datetime

now = datetime.datetime.now()
delta = datetime.timedelta(hours = 1)

print (now - delta)
Posted by banasun :

[ubuntu] 개인 디렉토리(public_html)에서 php 사용하도록 세팅하기

2015. 1. 4. 17:13 from Dev/Linux

지난번 포스팅에서는 개인 유저 디렉토리를 apache2에서 이용할 수 있도록 하는 방법을 정리하였습니다. 이제는 php도 이용가능하도록 세팅을 해야겠습니다. ubuntu에서는 기본적으로 개인 폴더에서 php를 이용할 수 없도록 되어 있습니다.

관련된 설정 모듈은 /etc/apache2/mods-available에서 찾아볼 수 있습니다. php5.conf 설정을 보시면, 다음과 같은 부분이 있습니다 :



# Running PHP scripts in user directories is disabled by default
# 
# To re-enable PHP in user directories comment the following lines
# (from  to .) Do NOT set it to On as it
# prevents .htaccess files from disabling it.

    
        php_admin_flag engine Off
    



이 부분을 주석처리(라인 앞에 # 삽입) 해주신 다음에 service apache2 restart 해주시면 개인 폴더에서도 php가 실행되는 것을 알 수 있습니다.

Posted by banasun :

[python] version별로 module import 하기.. (python2 VS python3)

2015. 1. 4. 02:21 from Dev/python

Python 2에서 Python 3으로 넘어가면서 이것저것 많이 바뀌고 해서 익숙하게 사용하던 것도 바꾸어 주어야 하는 경우가 생깁니다.

아직까지 호스팅 하는 서버들은 Python2.7 정도를 서비스 하는 곳이 많은데.. 사실 개발용 PC에는 Python3을 쓰게 되지요. 계속 2를 붙잡고 있을 수는 없는 노릇이라.. -0-

웬만하면 3에 맞추어서 코딩을 하면서 어쩔 수 없는 부분이 바로 module 부분입니다. 오늘은 간단하게 버전별로 모듈을 따로 써보겠습니다. 정확히 하면 하나로 import 했다가 에러나면 '에구구' 하고 다른 버전용을 import하는 꼼수지요.

Python 3에서는 urldecode를 하려면 urllib.parse.unquote을 써야 하고, Python 2에서는 urllib.unquote를 사용해야 합니다. 이럴 경우에 다음과 같이 정의해주면 됩니다 :



try:
    from urllib import unquote
except ImportError:
    from urllib.parse import unquote


물론 명시적으로 version을 불러서 하는 방법도 생각해볼 수는 있겠지만, 이렇게 하는게 더 적당하지 않을까.. 하는 생각입니다. ^^

'Dev > python' 카테고리의 다른 글

MySQL-python 설치하기 (Ubuntu)  (1) 2015.01.21
[python] 1시간 전 datetime 구하기  (0) 2015.01.07
[python] date format을 datetime format으로  (0) 2015.01.03
[python] MySQL 연결  (0) 2014.09.05
[Algorithmic Thinking] Project 1  (0) 2014.09.05
Posted by banasun :

[python] date format을 datetime format으로

2015. 1. 3. 03:21 from Dev/python

개인적으로 코딩을 할 때 제일 재미없는 부분이 날짜, 문자열, 포맷변환 등등입니다. 이거만 누가 다해준다면 정말 빨리 일 끝낼텐데.. ^^

python에서 date --> datetime으로 변환하는 꼼수를 소개해드립니다 :

datetime.datetime에는 combine이라는 메소드가 있습니다. date와 time을 인수로 받아서 이에 맞는 datetime를 반환해주지요. 이걸 활용하는 방법입니다. 예로 어제 날짜에서 하루 전(그저께)를 받아보겠습니다



from datetime import datetime
from datetime import date

yesterday = date.today() - datetime.timedelta(1)
datetime.combine(yesterday, datetime.min.time())
Posted by banasun :

[nginx] nginx windows version에서 php 세팅 - fastCGI 설정하기

2014. 12. 31. 10:07 from Dev/etc

오늘은 지난 포스팅(http://banasun.tistory.com/entry/ngix-%EC%84%A4%EC%B9%98Windows)에 이어서 php 설정을 해보도록 하겠습니다. 요새는 WAMP니, LAMP니 하는 패키지처럼, apache를 쓰면 당연히 MySQL, PHP가 따라오는 거로 생각하고 있었는데, nginx에서는 php를 이용하려면 다른 설정을 해주어야 합니다. 바로 FastCGI라는 부분이지요.

FastCGI는, 기존 CGI가 web server가 request가 들어오면 CGI process를 생성해서 이를 처리하고 하면 번거로우니, 차라리 Fast CGI server가 CGI process를 처리하고(process를 생성하고 없애고 하는게 아니라 persistent process가 있는 거지요) web server는 request를 Fast CGI server로 넘겨주기만 하면 된다는 개념입니다. 이렇게 함으로써 웹서버의 부담이 줄어들고 한번에 더 많은 request를 처리할 수 있게 된다는 거지요.

1. nginx 설치하기

linux 명령어 가운데 거의 안쓰는 명령어가 있는데, 바로 touch라는 명령어지요. 설치는 지난번 포스팅에서 'touch' 하였습니다. ㅋㅋ (이래 놓으면 touch가 뭐지? 하고 찾아보시는 분들 생길 것 같네요)

안 보신 분들은 http://banasun.tistory.com/entry/ngix-%EC%84%A4%EC%B9%98Windows 보시기 바랍니다.

2. php 설치하기

이것도 binary 다운받으시면 바로 설치가 됩니다. 다운로드는 여기서(http://windows.php.net/download/) 받으시고요.

3. 설정하기

일단 php에서 별도로 cgi 처리를 위해서는 php-cgi.exe라는 파일을 돌려주어야 합니다. 아래와 같이 batch file을 만들어 놓으시면 편하게 이용하실 수 있습니다.

저는 지난번에 wamp를 깔아보면서 같이 설치된 파일이 있어서 디렉토리를 저렇게 해놨는데, 디렉토리 설정은 알맞게 바꿔주세요. 그리고 FASTCGI용 포트는 9123으로 해놓았습니다 :

@ECHO OFF
ECHO Starting PHP FastCGI...
set PATH=C:\wamp\bin\php\php5.5.12;%PATH%
C:\wamp\bin\php\php5.5.12\php-cgi.exe -b 127.0.0.1:9123

이제 nginx의 해당 부분 설정을 바꾸어줍니다.

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9123;
            fastcgi_index  index.php;
	    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

이제 위에서 만든 batch 실행하신 다음에 nginx를 돌리면 됩니다. ^^

Posted by banasun :

nginx 설치(Windows)

2014. 12. 29. 17:04 from Dev/etc

세계에서 가장 많이 이용하는 웹서버는 무엇일까요? 그러면 어떤 웹서버를 이용하는게 좋을까요? (물론 이 두 질문이 같은 질문은 아닙니다)

이 질문에 대해서 예전에는 당연히 Apache라는 대답을 떠올렸지만 이제는 다소 고민을 하게 됩니다.

물론 아직까지 가장 많이 이용하는 웹서버는 Apache입니다. 하지만 몇 년 전까지 70%에 육박하던 점유율이 이제는 반토막이 되어서 M$ 서버와 비슷한 수준이 되어 버렸고, 대신에 nginx(이렇게 쓰고 '엔진X'라고 읽습니다)가 20% 가까이 올라오고 있습니다(IT World 기사, Choosing a Linux web server: Nginx vs. Apache).



오늘은 시간이 조금 남는 관계로, 윈도우즈로 돌아가는 PC에 한번 설치를 해보도록 하겠습니다.

먼저 다운로드입니다. nginx 사이트(http://nginx.org/en/download.html)에 가면 윈도우즈 버전을 다운받을 수 있습니다. 1.6.2가 최근 stable 버전입니다.

윈도우즈 버전은 설치하고 말고 할 것도 없네요. 압축 풀고 실행하면 바로 서비스가 실행되는군요. 블로그 쓸 내용이 없네요 ㅋㅋ 할 수 없습니다. 가지고 놀아보고 설정하는 방법 등은 다른 포스팅으로 넘겨야겠습니다.

하여튼 실행파일을 실행하고 브라우져에서 http://localhost로 접속해서 아래 화면이 나오면 돌아가고 있는 겁니다.


명령어는 -s 옵션으로 줍니다(signal). PATH 설정이 안되었다면, 해당 폴더로 가셔서 아래와 같이 command 창에서 해줄 수 있습니다 :



nginx -s quit
nginx -s reload


설정은 설치 폴더의 conf 안에 있습니다. nginx.conf가 주요 설정들인데.. apache를 사용해보았다면 그냥 알 수 있도록 직관적으로 되어 있네요.

원래 설치한 목적은 역시 요새 유행하는 framework인 Laravel을 설치해서 테스트해보려는 것이었는데 언제나 일을 시작하다 보면 곁가지로 새버리는 것 같습니다. 어렸을 때 시험치기 전에 책상 정리하던 기억이 나는 이유는 무엇일까요.

Laravel 역시 다음 포스팅으로 넘기고 오늘은 이만 또 일로 복귀해야겠습니다.

Posted by banasun :