유용한 javascript 예제와 팁

URL 파라메터 받아오기(get PARAM)

http://www.codetreat.com/get-url-parameters-values-with-javascript

$.params = function(paramname){
var value = new RegExp('[\?&]' + param
name + '=([^&#]*)').exec(window.location.href);
return value[1];
}

Jquery 셀렉터 성능(JQUERY SELECTOR Performance)

http://jsperf.com/selectors-perf/6
cssSelector는 id 나 element와 함께 쓰지 않고 단독으로 사용한다.


var obj = document.getElementById("childDiv");
xxx = obj.getElementsByClassName("txtClass");

 

이벤트 처리

preventDefault() : 이벤트의 기본 행동을 막는다.
If this method is called, the default action of the event will not be triggered.
stopPropagation() : 상위 핸들러로 이벤트를 넘기지 않도록 막는다.
Prevents the event from bubbling up the DOM tree,
preventing any parent handlers from being notified of the event.

prepend() - 앞쪽에 내용을 붙인다.(to attach content as a prefix.)
append() - 뒷쪽에 내용을 붙인다. (to attach content as a suffix.)

배열 요소에서 데이터를 받고 싶을 땐 $()로 한번 더 감싼다.
$($(array_selector)[0]).data(something);


두번 submit되는 문제(prevent submit twice)
onclick이벤트 보다는 onsubmit 이벤트를 사용한다.
http://stackoverflow.com/questions/2830542/prevent-double-submission-of-forms-in-jquery

this.element.find('.save').attr('disabled','disabled');

// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function() {
$(this).bind('submit',function(e){
var $form = $(this);
if ($form.data('submitted') === true) {
// Previously submitted - don't submit again
e.preventDefault();
} else {
// Mark it so that the next submit can be ignored
$form.data('submitted', true);
}
// Keep chainability
return this;
};


JSON

Object to String
JSON.stringify(obj);
Parse JSON response
JSON.parse(obj);

JSON.parse()사용시 오류 : Uncaught SyntaxError: Unexpected token o
http://stackoverflow.com/questions/8081701/i-keep-getting-uncaught-syntaxerror-unexpected-token-o
데이터형이 올바르지 않아서 나는 오류이다.
Looks like jQuery takes a guess about the datatype.
It does the JSON parsing even though you're not calling getJSON()--
then when you try to call JSON.parse() on an object, you're getting the error.


loglevel

https://github.com/pimterry/loglevel
원하는 레벨의 로그를 콘솔 메시지로 보낸다.
켜고 끄는 것이 편리하다.
log.enableAll() and log.disableAll() methods.
* log.trace(msg)
* log.debug(msg)
* log.info(msg)
* log.warn(msg)
* log.error(msg)


JavaScript 디버깅

chrome dev tool -> Settings -> General -> Disable cache
Timeline을 이용하면 어떤 코드가 어플리케이션에 부하를 주는지 찾아준다.
메모리 누수가 발생한다면 찾아 개선한다.
Profiles도구에서 Heap Snapshot을 두 개 만들어 comparison view로 비교하면 성능 저하 원인을 찾기 편하다.



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

파이썬 Flask 플러그인 안내와 팁.

데이터베이스
Flask-SQLAlchemy : OR매핑을 지원하는 플라스크용 파이썬 SQL toolkit
SQLAlchemy에서 상속(Inheritance) : http://docs.sqlalchemy.org/en/rel_0_7/orm/inheritance.html

SQLAlchemy 컬럼에 데이터가 생성될때나 업데이트 될때 현재 시각을 자동으로 넣는 방법.
updated_at = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())

로그인·보안
Flask-Social : 소셜 네트워크와의 연결을 간편하게 해 줌.
Flask Security(Auth) : 로그인과 권한관리.

관리자 페이지
Flask-Admin : 관리자 페이지를 손쉽게 만들도록 도와줌.

다국어 지원
Flask-Babel : 파이썬용 다국어 지원 Babel의 Flask 플러그인

캐쉬
flask-cache : 캐쉬 설정을 도와줌.

에셋 관리
flask-assets : 각종 static 에셋 관리를 편하게 도와줌.
사용하고자 하는 기능에 따라 추가 모듈이 필요하다. (css 압축, scss사용)
pip install cssmin
pip install pyscss
Flask-Assets extension에서 pyScss컴파일러 사용 설정법

from flask import Flask, render_template
from flask.ext.assets import Environment, Bundle

app = Flask(__name__)

assets = Environment(app)
assets.url = app.static_url_path
scss = Bundle('foo.scss', 'bar.scss', filters='pyscss', output='all.css')
assets.register('scss_all', scss)
And in the template include this:

{% assets "scss_all" %}
{% endassets %}

SCSS file은 debug모드에서도 컴파일 된다.

캐쉬
Flask-Cache : 플라스크에서 캐쉬 사용 하기 쉽게 도와줌.
# Flask-Cache Cache Type
CACHE_TYPE = 'simple' # 개발 시
CACHE_TYPE = 'redis' # 배포 시. redis 서버 구동 필요.
from flask.ext.cache import Cache

app = Flask(__name__)
cache = Cache()
cache.init_app(app, config={'CACHE_TYPE': CACHE_TYPE})

파일 업로드
Flask-Uploads : 파일 업로드 관련 처리를 도와줌.
from flask.ext.uploads import UploadSet
images = UploadSet()
images.__init__('upload', IMAGES)
filename = images.save(files, folder='/images', name='test.')
image_path = images.path(filename)
url = images.url(thumbnail)

텍스트 검색
Flask-WhooshAlchemy : 텍스트 기반 검색을 쉽게 도와줌

오류 추적
flask-exceptional : 오류 추적 서비스인 exceptional를 flask에서 이용 가능하게 도와줌.

전자상거래(e-commerce) [flask용 extension 아님]
stripe : 결제 모듈을 간편하게 시스템에 붙이도록 도와주는 서비스.
satchmoproject : 오픈소스 전자 상점 프레임워크 (satchmo Wiki)
satchless : 프레임워크에 종속적이지 않은 e-commerce용 클래스와 패턴 모음
flamaster : flask용 e-commerce eventing 시스템

Flask에서 JSON 다루기(JSON Handling in Flask)
http://flask.pocoo.org/docs/api/#module-flask.json

import requests
r = requests.get(QUERY_URL)
return r.json
//normal return
return jsonify(username=g.user.username,
email=g.user.email,id=g.user.id)

jsonify a SQLAlchemy result set in Flask
http://stackoverflow.com/questions/7102754/jsonify-a-sqlalchemy-result-set-in-flask
jsonify의 문제는 object가 자동으로 json화 되지 않는다는 것이다.
serialize를 위해 다음을 모델에 추가 해 준다.


def dump_datetime(value):
"""Deserialize datetime object into string form for JSON processing."""
if value is None:
return None
return [value.strftime("%Y-%m-%d"), value.strftime("%H:%M:%S")]

class Foo(db.Model):
//... SQLAlchemy defs here..
def __init__(self, ...):
//self.foo = ...
pass
@property
def serialize(self):
"""Return object data in easily serializeable format"""
return {
'id' : self.id,
'modified_at': dump_datetime(self.modified_at),
# This is an example how to deal with Many2Many relations
'many2many' : self.serialize_many2many
}
@property
def serialize_many2many(self):
"""
Return object's relations in easily serializeable format.
NB! Calls many2many's serialize property.
"""
return [ item.serialize for item in self.many2many]

뷰에서는 아래처럼 사용한다.

return jsonify(json_list=[i.serialize for i in qryresult.all()])

gunicorn서버 사용 설정.

from werkzeug.contrib.fixers import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app)

if __name__ == '__main__':
port = int(os.environ.get('PORT', 5000))
app.run()

Blueprint
routing관리에 이용한다.
application/feedback 폴더에 모듈을 넣을 경우.

from flask import Blueprint
mod = Blueprint('root', __name__, url_prefix='') // prefix를 공란으로 두면 root를 의미한다.
mod = Blueprint('feedback', __name__, url_prefix='/feedbacks') // prefix를 채우면 route('/')가 해당 prefix와 같다.
@mod.route('/')

새로운 디렉토리를 만들고 __init__.py파일을 추가해야 import시 인식한다.

모듈을 사용하려면 어플리케이션에서 등록해 준다.

from application.feedback.views import mod as feedbacksModule
app.register_blueprint(feedbacksModule)

파일 여러개 올리기(Uploading multiple files with Flask)
http://stackoverflow.com/questions/11817182/uploading-multiple-files-with-flask


@app.route("/upload", methods=["POST"])
def upload():
uploadedfiles = flask.request.files.getlist("file[]")
print uploadedfiles
return ""

동적으로 생성된 이미지 파일의 url 받기(How to get url for dynamically generated image file?)
http://stackoverflow.com/questions/12034949/flask-how-to-get-url-for-dynamically-generated-image-file

@app.route("/imgs/")
def images(path):
generateimg(path)
fullpath = "./imgs/" + path
resp = flask.makeresponse(open(fullpath).read())
resp.content_type = "image/jpeg"
return resp

mydomain.com/static/test.jpg

from flask import Flask, redirect, url_for

app = Flask(__name__)
@app.route('/')
def index():
generate_img("test.jpg"); #save inside static folder
return '<img src=' + url_for('static',filename='test.jpg') + '>'

Jade
두개의 속성을 지정할 땐 콤마(,)를 잊지 않는다.

script(data-main='js/app', src='js/vendor/require.js')



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

인터넷 정량제를 이용하시는 분들을 위한 대역폭 절약 팁입니다.

인터넷 대역폭 절약 노하우

저는 아일랜드에 와서 인터넷 정량제를 쓰기 시작했습니다.
한국에서는 100메가 급 광렌 정액제 가격으로,
7메가급 15G 정량제를 쓰고 있죠.
나름 아껴 쓴다고 했는데, 사용량이 쑥쑥 올라가더군요.
월 초에 사용량이 새로 시작 되는 줄 알고, 말 일에 남은 대역폭을 다 썼습니다.
그러고 1일이 되니, 사용량이 리셋 되지 않네요?
날이 지날수록 추가 사용 요금은 늘어나기만 하고..
사용량 초기화가 될 기미가 안 보이는군요.
궁금해서 전화를 했습니다.
“저기요. 제가 저번 달부터 인터넷을 쓰거든요? 근데 이거 초기화가 언제 되나요?”
“네 고객님. 고객님이 결제하신 날부터 30일 후에 초기화 됩니다. 9일에 되네요.”
“제가 1일에 초기화 될 줄 알고 계속 썼거든요? 근데 추가 이용료가 엄청나네요. 정말 이 돈을 내야 하는 건가요?
월 15기가에 삼 만 이천 원인데, 4기가 더 썼다고 추가 요금이 십 만원이 넘게 나왔어요!”
“네 고객님 인정합니다. 추가 요금이 좀 비싸죠. 하하.”
“제가 인터넷 신청할 때 초기화 날짜에 대한 설명을 못 들었어요. 이 추가 요금을 해결 할 방법 없나요?”
“네 고객님 저희 서비스 이용이 처음이시니 이번에만 추가 요금을 없던 걸로 해 드리겠습니다.
다음달 부턴 사용량 잘 확인하시며 사용하세요.”

휴.
다행히 첫 달 추가 요금은 없던 일로 되었지만,
앞으로 아껴 써야 다음달에 깜짝 놀랄 요금폭탄을 맞지 않겠죠?
인터넷 대역폭을 절약하려면 어떻게 해야 할까요?

-'인터넷 대역폭 절약 노하우'

인터넷 대역폭 절약 노하우

  • 인터넷 사용량을 점검하세요.
    무료 인터넷 사용량과 속도를 확인 가능한 Networx 프로그램을 추천합니다.
    Networx
    한글을 지원하는 인터넷 측정기로, 설치버전과 포터블 버전을 모두 제공해요.
  • 사용하지 않을 땐 인터넷 접속을 끊어 놓습니다.
  • 웹 사이트 브라우징을 할 때 플래쉬와 이미지 자동 로딩 기능을 꺼 놓으세요.
    플래쉬 차단 파이어폭스 확장 Flashblock
    이미지 자동로딩 토글 파이어폭스 확장 Image show hide
  • 팝업 차단 기능을 사용하세요.
  • 윈도우 자동 업데이트 기능을 꺼 놓으세요.
  • 방화벽을 사용하세요.
  • SNS 이용에 너무 많은 시간을 보내지 마세요.
  • 유투브 동영상을 볼 땐 원하는 부분부터 재생하기를 이용하세요.
    아래의 예제처럼 동영상 주소 뒤에 분과 초를 넣어주시면 됩니다.
    http://www.youtube.com/watch?v=pdQbxkrJxNM#t=0m30s
  • 개발자라면 오프라인에서 쓸 수 있는 API를 다운 받아 쓰세요.

이상 인터넷 대역폭 절약 노하우였습니다.

by 月風



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

레일즈 3.1 가이드를 HTML로 내려 받아, 오프라인에서 보는 방법입니다.

레일즈 3.1 가이드 내려 받기

한국처럼 인터넷 환경이 잘 갖추어진 곳에선 굳이 레일즈 가이드를 다운 받을 필요가 없어요.
하지만 레일즈 가이드가 딱 필요한 순간에 서버가 점검중이던가,
갑작스런 인터넷 회선의 문제가 생겼을 때 유용합니다.
또 인터넷이 아주 느린 환경이나,
저처럼 인터넷을 정량제로 쓰신다면, 내려 받은 레일즈 가이드가 상당히 쓸만해요.
레일즈 사이트에 갔더니 가이드 내려 받기를 따로 지원하지 않는군요.
‘레일즈 3.1 가이드는 어디서 다운 받나요?’
검색엔진을 통해 방법을 찾았습니다.
아래의 방법을 따라 레일즈 가이드를 내려 받으세요.

레일즈 3.1 가이드 내려 받기

  1. 우선 Git를 설치합니다.
  2. git clone git://github.com/rails/rails.git 으로 rails.git를 복제합니다.
  3. gem install RedCloth --no-rdoc 으로 RedCloth Gem을 설치합니다.
  4. Ruby_Root(루비가 설치된 루트)\lib\ruby\gems\1.9.1\gems\RedCloth-4.2.8\lib 디렉토리로 갑니다.
  5. mkdir 1.91.9 폴더를 만듭니다.
  6. copy redcloth_scan.so 1.9 명령어를 실행해 redcloth_scan.so를 1.9 폴더로 복사합니다.
  7. cd rails 명령어로 rails 디렉토리로 갑니다.
  8. git checkout origin/3-1-stable -b 3-1-stable 명령어로 레일즈 3.1 버전을 체크아웃합니다.
  9. cd railties/guides 명령어로 가이드 디렉토리로 갑니다.
  10. ruby rails_guides.rb 를 실행합니다.
  11. 그럼 output 폴더가 생성되는데, 이 폴더가 레일즈 3.1 가이드 오프라인 버전입니다.

내려 받은 가이드로 오프라인에서도 편하게 루비온 레일즈 개발 하세요.:D

참고 자료

How to install redcloth on windows

Rails 3 guides ruby on rails in pdf


by 月風



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

Perl Script로 CSV다루는 방법입니다.

Perl Script로 CSV다루기

Perl Dev Kit-'Perl Script로 CSV다루기'

펄 스크립트용 CSV 모듈로 Text-CSV가 있습니다.

액티브 펄을 사용 중이라면 PPM(Perl Package Manager)를 이용해 다음과 같은 방법으로 모듈을 추가할 수 있죠.

PPM install Text-CSV_XS

그런데 저는 Text-CSV_XS 패키지 설치가 안 되더군요.

그래서 좀 지난 버전을 설치해보니 잘 깔립니다.

PPM install Text-CSV

그런데 자꾸만 TEXT-CSV_PP 파일을 찾을 수 없다는 오류가 나네요.

인터넷에서 검색을 해보니 환경변수에 다음을 추가해 주면 잘 작동한다고 합니다.

PERL5LIB=C:\Perl\site\lib;C:\Perl\lib;

하지만 안되는군요.

개발시간의 태반은 설계가 잡아먹고,
모듈 설치다 뭐다 환경 설정이 20%를 가져가면,
코딩하는 시간은 10% 정도밖에 안 되는 것 같습니다.

아래 링크에서 Text-CSV_XS 소스를 직접 받아서 펄 라이브러리 폴더(C:\Perl\site\lib)에 넣었어요.

CPAN CSV_XS.PM

사용 방법도 잘 설명되어 있죠.

CSV_XS ERROR: 2023 - EIQ - QUO character not allowed

혹시 위와 같은 에러가 난다면 new 할 때 아래의 속성을 추가해 보세요.

allowloosequotes => 1
escape_char => undef

아래코드는 간단하게 작성해 본 예제에요.


!/usr/bin/perl

use Text::CSV_XS;

if ( @ARGV > 1 ){   
    my $input = @ARGV[0];
    my $output = @ARGV[1];
   
    my $csv = Text::CSVXS->new ({ binary => 1, allowloosequotes => 1,escapechar => undef }) or
     die "Cannot use CSV: ".Text::CSVXS->errordiag ();
    open my $fh, "<:encoding(utf8)", $input or die $input.": $!";
    my $columnname = $csv->columnnames ($csv->getline ($fh));
   
    while (my $row = $csv->getline ($fh)) {
    print("size = $columnname\n");
     
    for $n (0 .. $column
name) {
      $column = $row -> [$n];
      $row -> [$n] = $column;
    }

     push @rows, $row;
     }
 $csv->eof or $csv->error_diag ();
 close $fh;

 $csv->eol ("\n");
 open $fh, ">:encoding(utf8)", $output or die $output.": $!";
 $csv->print ($fh, $_) for @rows;
 close $fh or die $output.": $!";
}else {
  print "No Arguments!\n";  
}


by 月風



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하는 법입니다.

윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하기

Perl Dev Kit-'윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하기'

저는 요즘 펄의 오묘한 세계에 잠시 발을 담그고 있습니다.
참 매력적인 언어인 것 같아요.
하지만 계속 개발하고 싶은 언어는 아닙니다.
머리가 아프거든요.^^;
펄의 스크립트 소스인 pl파일을 exe파일로 컴파일하고 싶습니다.
구글께선 아래와 같은 답을 주셨습니다.
Perl Dev Kit을 이용하면 아주 간단합니다.

펄 소스(*.pl)파일을 exe파일로 컴파일하기

  1. 액티브펄을 내려받아 설치합니다.
  2. Perl Dev Kit 평가판을 내려받아 설치합니다.
  3. Perl Dev Kit가 설치된 폴더로 가서 perlapp-gui.exe를 실행시킵니다.
  4. Open Script(CTRL+O)를 이용해 펄 스크립트 소스를 엽니다.
  5. Make Executable 버튼을 눌러 실행 파일()을 생성합니다.

Perl Dev Kit 덕분에 편하게 컴파일했네요.:D
혹시 펄 스크립트를 exe로 컴파일하실 분은 Perl Dev Kit를 이용해 보세요.
by 月風



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!