python 및 머신러닝 교육, 슬로우캠퍼스

OCR + python




PyTesser is an Optical Character Recognition module for Python. It takes as input an image or image file and outputs a string.

PyTesser uses the Tesseract OCR engine, converting images to an accepted format and calling the Tesseract executable as an external script. A Windows executable is provided along with the Python scripts. The scripts should work in other operating systems as well.

Dependencies

PIL is required to work with images in memory. PyTesser has been tested with Python 2.4 in Windows XP.

Usage Example

>>> from pytesser import *
>>> image = Image.open('fnord.tif')  # Open image object using PIL
>>> print image_to_string(image)     # Run tesseract.exe on image
fnord
>>> print image_file_to_string('fnord.tif')
fnord





'Data/Text/Knowledge Analysis & Mining > Python' 카테고리의 다른 글

[Git] 기본 설정 및 사용  (0) 2013.07.30
python pdf - reportlab  (0) 2013.07.26
python pdf library 비교  (0) 2013.07.26
mongoDB, python, twitter Oauth  (0) 2013.07.25
unicode, chatdet  (0) 2013.07.21

WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

pyhton으로 pdf file 만들기



Note that the similar-appearing pyfpdf of Mariano Reingart is most comparable to ReportLab, in that both ReportLab and pyfpdf emphasize document generation. Interestingly enough, pyfpdf builds in a basic HTML->PDF converter;




pdfrw - Python library to read and write PDF files - Google Project ...

17 September 2012 

예) https://code.google.com/p/pdfrw/wiki/ExampleTools  --> Watermarking PDFs



pyfpdf - Simple PDF generation for Python (FPDF PHP port) AKA ...


Latest Relesed Version: 1.7 (August 15th, 2012) - Current Development Version: 1.7.1


예)  http://pyfpdf.googlecode.com/hg/tutorial/tuto3.pdf


pypdf --> pypdf2

http://knowah.github.io/PyPDF2/

https://github.com/knowah/PyPDF2/  - pure python




ReportLab 

https://bitbucket.org/rptlab/reportlab


 easy_install reportlab or pip install reportlab 


ReportLab 기반 예) https://docs.djangoproject.com/en/dev/howto/outputting-pdf/






'Data/Text/Knowledge Analysis & Mining > Python' 카테고리의 다른 글

python pdf - reportlab  (0) 2013.07.26
OCR + python  (0) 2013.07.26
mongoDB, python, twitter Oauth  (0) 2013.07.25
unicode, chatdet  (0) 2013.07.21
python map reduce lambda  (0) 2013.07.20

WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스



활용 및 배울 기술:

twitter.com OAUTH 연동, twitter API사용 하여 리소스 가져오기

  -- oauth, python tweepy.py




== 파이선 외부 라이브러리 소스 확인 위치

/usr/local/lib/python2.7/site-packages/

/usr/local/lib/python2.7/site-packages/tweepy



http://elle.atzine.com/elle/elleweb_template_fashion.iht?contId=B11_20110527_09100&menuId=M00024



mongo DB (weechat 서버 상태)

=== mong DB

port=27017

dbpath=/data/db/


== mongo DB 기동 확인 (mongo daemon 서버)

$ ps -ef | grep mongo

root      3243     1  0 Aug06 ?        00:00:06 ./mongod


== 설치 위치

/home/xxxx/bin/ 아래에 실행파일로 있음.  (컴파일, install 없이 binary만 복사해도 됨)


== 실제 mongo DB data 파일  위치

/data/db


== mongo DB 접속해 보기 (‘mongo’라고 실행하면 command를 입력할 수 있는 prompt로 들어간다)

mongo 에서는 db가 mysql의 db, collection이 table 쯤에 해당한다.

아래와 같은 순서로 입력해 본다.


# mongo

> help

> show dbs

> use weechat2  

> show collections
> db.users.find()     // users 라는 테이블 전체 레코드 보기

> db.users.find({"id":100004})     // users 라는 테이블에서 id가 10004 인 레코드 출력

> db.users.findOne()

> db.users.count()

> db.users.remove() // delete all

> db.users.insert( {“id”:100, “name”:”han”} )  // 레코드 추가

> db.users.update()  // 레코드 업데이트

> db.users.drop()   // collection (table) 전체 drop 하기



mongo와 mysql 명령어 비교   http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart



mac OS X 에서 mongo 설치하기

http://www.mongodb.org/display/DOCS/Quickstart+OS+X


mongo와 python → pymong

샘플소스



mongo명령어 prompt와 유사한 문법으로 pymong 사용 가능

import pymongo

from pymongo import Connection

connection = Connection()

db = connection.mydb1

table = db.followers

print table


table.insert({"id":"xxxxx", "flist":[("aaa", 10), ("bbb", 20)]})

c=table.find({"id": "xxxxxx"})

for cc in c:

       flist = cc["flist"]

      print flist



table = db.twitter

print table

table.insert({"id":"xxxxxx", "flist":[("aaa", 10), ("bbb", 20)]})


table = db.weechat.myrooms

print table

table.insert({"id":"xxxxxx", "rlist":[("roomtoken1", "membertoken1"), ("roomtoken2", "membertoken2"]})


table = db.weechat.roominfos


print table

table.insert({"id":"xxxxxx", "rlist":["roomtoken1", "roomtoken2"]})





http://www.snailinaturtleneck.com/blog/tag/mongodb/


'Data/Text/Knowledge Analysis & Mining > Python' 카테고리의 다른 글

OCR + python  (0) 2013.07.26
python pdf library 비교  (0) 2013.07.26
unicode, chatdet  (0) 2013.07.21
python map reduce lambda  (0) 2013.07.20
google app engine urlfetch, urllib2  (0) 2013.07.16

WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

웹서버  

tornado server를 웹서버로 사용

mongoDB를 db로 사용

(chat server 는 따로 mongoDB 사용. 서로 분리됨)

tornado sever 사용


서버기동확인 방법:

# ps -ef | grep py



# python chatdemo.py --port=8100


홈피 수정

# /home/tornado_demos/chat/templates/index.html 수정해보기 바람



현재 /tmp/chat/  에서  8000 포트로 기동한 상태.


서버확인:

브라우저에서


http://weechat.kr:8000



twitter 서버 연동 - oauth

oauth 연동 샘플 사이트

Twitter OAuth Demo


이 사이트의 소스

https://github.com/tav/tweetapp


twitter API용 python lib tweepy


# pip install tweepy




OAuth settings

Your application's OAuth settings. Keep the "Consumer secret" a secret. This key should never be human-readable in your application.

Access level

Read-only

About the application permission model

Consumer key

lj1tenUgCtXJUnfmvN7PWA

Consumer secret

DBYk5Qdnew9nnye9JFD5KlI4cCbueunRPzJBo

Request token URL

https://api.twitter.com/oauth/request_token

Authorize URL

https://api.twitter.com/oauth/authorize

Access token URL

https://api.twitter.com/oauth/access_token

Callback URL

http://weechat.kr/twt_oauth_callback

Your access token

Use the access token string as your "oauth_token" and the access token secret as your "oauth_token_secret" to sign requests with your own Twitter account. Do not share youroauth_token_secret with anyone.

Access token

102303698-vdawrDimKPI4w3IGWWse3pnQQym9OA8RftjCd5wx

Access token secret

WZ5Xv7W3hXKBGyqq7BYeQNjDjqq6Op79VnUpvtbLg

Access level

Read-only









oauth동작 과정


http://twitteroauth.appspot.com/oauth/twitter/login  에 접속하면

http://twitter.com/oauth/authorize 로 redirect 됨


# wget -d -o aa -O aaa http://twitteroauth.appspot.com/oauth/twitter/login



--2011-08-07 14:13:59--  http://twitteroauth.appspot.com/oauth/twitter/login

Resolving twitteroauth.appspot.com... 64.233.183.141

Connecting to twitteroauth.appspot.com|64.233.183.141|:80... connected.

HTTP request sent, awaiting response... 302 Found

Location: http://twitter.com/oauth/authorize?oauth_nonce=12747081930362030444&oauth_timestamp=1312694038&oauth_consumer_key=cZy7GCndV0v6xrfVSirG2g&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=bZQppJGeif5Xz3CzUe6HsGrS3Cc2JI33AgdP6PMSI&oauth_signature=moJc6hA9nWl3nl23qd2OyPeOWDY%3D [following]

--2011-08-07 14:14:00--  http://twitter.com/oauth/authorize?oauth_nonce=12747081930362030444&oauth_timestamp=1312694038&oauth_consumer_key=cZy7GCndV0v6xrfVSirG2g&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_token=bZQppJGeif5Xz3CzUe6HsGrS3Cc2JI33AgdP6PMSI&oauth_signature=moJc6hA9nWl3nl23qd2OyPeOWDY%3D

Resolving twitter.com... 199.59.148.10, 199.59.148.82, 199.59.149.230

Connecting to twitter.com|199.59.148.10|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 7585 (7.4K) [text/html]

Saving to: `aaa'


    0K .......                                               100% 42.4K=0.2s


2011-08-07 14:14:00 (42.4 KB/s) - `aaa' saved [7585/7585]








---


GET /twt_oauth_callback?oauth_token=8SCjZmZtbaSyMqnOBqbMAiK5310mmnhXuNMWd2OoYc&oauth_verifier=8X2zECUz9HZqfHLTvaP7MdIpdTCA6uItzGyG9Tu5w (61.43.139.4) 0.74ms




Tweepy

twitter api 사용




<tweepy.models.User object at 0x2b7041979190>

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api', 'contributors_enabled', 'created_at', 'default_profile', 'default_profile_image', 'description', 'favourites_count', 'follow', 'follow_request_sent', 'followers', 'followers_count', 'followers_ids', 'following', 'friends', 'friends_count', 'geo_enabled', 'id', 'id_str', 'is_translator', 'lang', 'listed_count', 'lists', 'lists_memberships', 'lists_subscriptions', 'location', 'name', 'notifications', 'parse', 'parse_list', 'profile_background_color', 'profile_background_image_url', 'profile_background_image_url_https', 'profile_background_tile', 'profile_image_url', 'profile_image_url_https', 'profile_link_color', 'profile_sidebar_border_color', 'profile_sidebar_fill_color', 'profile_text_color', 'profile_use_background_image', 'protected', 'screen_name', 'show_all_inline_media', 'status', 'statuses_count', 'time_zone', 'timeline', 'unfollow', 'url', 'utc_offset', 'verified']



======= Direct Mesg

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api', 'created_at', 'destroy', 'id', 'id_str', 'parse', 'parse_list', 'recipient', 'recipient_id', 'recipient_screen_name', 'sender', 'sender_id', 'sender_screen_name', 'text']



======= User Timeline

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api', 'author', 'contributors', 'coordinates', 'created_at', 'destroy', 'favorite', 'favorited', 'geo', 'id', 'id_str', 'in_reply_to_screen_name', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'parse', 'parse_list', 'place', 'retweet', 'retweet_count', 'retweeted', 'retweets', 'source', 'source_url', 'text', 'truncated', 'user']


======= Mentions

16

['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getstate__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api', 'author', 'contributors', 'coordinates', 'created_at', 'destroy', 'favorite', 'favorited', 'geo', 'id', 'id_str', 'in_reply_to_screen_name', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'parse', 'parse_list', 'place', 'retweet', 'retweet_count', 'retweeted', 'retweets', 'source', 'text', 'truncated', 'user']

'Cloud Computing > NoSQL, DB' 카테고리의 다른 글

pymongo, mongoDB, twitter 연동 tweepy  (0) 2013.07.25

WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스



2011년 8월 2일 회의



 Weechat(가칭)서비스 사용자 시나리오

내부 동작 시나리오

 내가 Twitter.com 의 ID로 weechat 사이트에 로그인한다.

 나의 follower, following 들이 화면에 social graph형태 (node, link)로 출련된다.


 Q) Social Graph 가 어떻게 출력 되는것이 좋을까?

      1. Fill Color

      2. Circle Size

      3. Line Color

      4. Line Thickness

      5. Line Length

http://apps.facebook.com/socgraph/

http://www.touchgraph.com/navigator


  oauth연동 twitter연동

  twitter상의 관계정보를 flock DB 저장

  HTML5를 이용한 그래프 출력

( (social graph방식 - 친밀도에 따라 사진을 더 크게 출력

  또는  qwiki.com의 이미지 구성 방식)


  

 graph에서 특정 node를 클릭하면 그사람과의

  채팅창이 생성되고, 대화를 시작할 수 있다.


 사용자간의 친밀도에 따라 node사인의 거리 또는 node의 크기가 달라질 수 있다. (필수아님) -


 Q) 채팅창이 어떻게 생성되는 것이 좋을까?

      1. Facebook, Google Chat

      2. New chatting window


→    new chat window 가 좋을 것 같음. PC에서는.

   일단 PC용으로 구현. 폰에서는 어떻게 보이는지 추후 확인. -

  채팅서버 동작,

  대화내역은 memcached 서버에 저장

  대화진행중일때는 채팅서버내에 메모리에 대화 저장.

  대화가 새로 개시될때는 cache서버에서 다시 읽어온다.

  cache서버에 있는 대화를 disk에 백업하는 서버 모듈도 별도로 실행되고 있다.

(mongoDB ? redis ?)

  

 채팅창에 들어간다.

 기존 대화 내역이 화면에 보인다. (100줄)

 

  Q) 채팅에서 지원되는 기능은 어디까지 구현?

  1. 문자

  2. 사진

  3. 파일

  4. 음성

.

 채팅기능 websocket기반 구현

 IE브라우저는 flash 기반




Design 시안

1. Main Page


       


2. User Page






  • 카톡: app기반, 비실시간

  • weechat:

    • web기반(websocket, HTML5)

    • 실시간 (TCP connection이 계속 붙어 있음) -- PC메신저

    • not p2p, server가 중계하는 모델임 (switch역할) → 그룹채팅 가능



우리시스템구성

HAProxy, apache,

memcached,

flockDB,

mongoDB


google File system -- Hadoop FS

bigtable -- Hbase









20110802 박정민:

채팅창 생성 방법: 기본적으로 페이지 내부 채팅 창이 있고, 버튼을 누르면 새로운 창으로 띄울 수도 있도록 하는 것이 좋을 것 같습니다.


Social graph 출력은 다른 사이트에서 그대로 벤치마킹하는 것이 좋을 것 같습니다.

그리고 사람을 찾기 편하도록 그래프 위에 검색 기능을 넣는 것이 좋아보입니다.

(구글에서 검색어를 입력하면 실시간으로 검색되는 것 처럼 검색창에 검색어를 입력하면 graph가 움직이면서 제일 가까운 결과를 찾고, 그 옆에 검색 결과를 리스트 형태로도 같이 보여주는 것도 좋을 것 같습니다.

검색시 그래프가 움직이면서 검색하는 것은 만들기 어려울 것 같기도 한데, 만약 힘들다면 검색 결과에 따라 유사도가 높은 결과 순으로 색을 사용해 표시하는 것도 좋을 것 같습니다.


채팅에서 지원되는 기능 구현: 일단 문자와 사진까지는 구현하는 것이 좋을 것 같고, 파일과 음성은 제일 나중에 시간이 남을 경우 하는 것이 좋을 것 같습니다. 사진 공유 기능을 구현하면 파일 공유 기능을 만드는 것도 어렵지는 않겠지만 음성은 좀 힘들어 보입니다.




20110804 서보경:


채팅창 생성 방법: 기본적으로 페이지 내부 채팅 창이 있고, 버튼을 누르면 새로운 창으로 띄울 수도 있도록 하는 것이 좋을 것 같습니다.


Social graph 출력은 다른 사이트에서 그대로 벤치마킹하는 것이 좋을 것 같습니다.

그리고 사람을 찾기 편하도록 그래프 위에 검색 기능을 넣는 것이 좋아보입니다.

(구글에서 검색어를 입력하면 실시간으로 검색되는 것 처럼 검색창에 검색어를 입력하면 graph가 움직이면서 제일 가까운 결과를 찾고, 그 옆에 검색 결과를 리스트 형태로도 같이 보여주는 것도 좋을 것 같습니다.

검색시 그래프가 움직이면서 검색하는 것은 만들기 어려울 것 같기도 한데, 만약 힘들다면 검색 결과에 따라 유사도가 높은 결과 순으로 색을 사용해 표시하는 것도 좋을 것 같습니다.



채팅에서 지원되는 기능 구현: 일단 문자와 사진까지는 구현하는 것이 좋을 것 같고, 파일과 음성은 제일 나중에 시간이 남을 경우 하는 것이 좋을 것 같습니다. 사진 공유 기능을 구현하면 파일 공유 기능을 만드는 것도 어렵지는 않겠지만 음성은 좀 힘들어 보입니다.


20110805 ~~~ :


Webpage Overall Architecture :


Contact to us (contactus.html)

-datail : Show in all web pages, when users click this icon or hyperlink, they can email to us.

Contents frame

1. login_page (login.html)

   Before log in, login_page will show you in this frame.


2. user_page (user.html)

   After log on, user_page will show up in this area.

Information bar (information.html)

-detail : Show in all web pages, Include information about us like what we use open source library like twitter


                                  - weechat web page architecture and components-


20110805 ~~~~~:

파일은 사용자가 컴퓨터에 저장하지만 사진은 채팅 화면에 바로 표시된다는 점이 다른데,

생각해보니 그냥 파일 전송 기능만 만들고 전송한 파일이 사진일 경우에 따로 처리하는 것이 낫겠네요.



monggo DB

mongo db 서버 기동 여부 확인

# ps -ef | grep mongo


python에서

import pymongo


http://api.mongodb.org/python/1.11/



mongo db 테스트


>>> import pymongo

>>> from pymongo import Connection

>>> connection = Connection()

>>> db = connection.xxxx

print db.hello

table = db.hello

print table


table.insert({"name":"han", "age":10})


table.find_one()

table.find_one({"name": "han"})

c=table.find({"age": 10})

for cc in c:

print cc


table.find_one({“name”:”bokyung”})








tweepy (twitter API, python)

tweepy 테스트

#  python tweepy_test.py


http://twitter.com/oauth/authorize?oauth_token=YddUEeNouPkXXcwlfc2QmHgE501aGvXUbyqiQpA






tweepy_test2.py

29         CONSUMER_KEY = "lj1tenUgCtXJUnfmvN7PWA"

30         CONSUMER_SECRET = "DBYk5Qdnew9nnye9JFD5KlI4cCbueunRPzJBo"

31

32         auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)

33         aurl = auth.get_authorization_url()

34         print aurl

35

36         #auth.get_access_token(verifier)

37         key = "102303698-y239qrJn6EJ8RrTw9fBJfUXuXJslpB3tizolftPM"

38         secret = "t7du471eI75nxMlwn5idZ14yihCF8zNt9mNhijep8"

39         auth.set_access_token(key, secret)

40

41         api = tweepy.API(auth)

42         api.update_status(u"a tweet by tweepy module")




http://answers.oreilly.com/topic/2605-how-to-capture-tweets-in-real-time-with-twitters-streaming-api/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fnews+%28O%27Reilly+News+and+Commentary%29




dev.twitter.com











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

weechat 서버의 mongDB table 정의


db.weechat.users = {

‘id’: 123456

‘screen_name’: ‘twitter_name(xxxx)’,

‘name’: ‘이름’,

‘imgurl’: ‘http://a0.twimg.com/profile_images/772043698/SKT______normal.jpg’

}


table = db.weechat.users

table.insert({‘id’: 123456, ‘screen_name’: ‘xxxx’})


db.weechat.relations =

                            {

                               "id":me.id,

                               "flist": flist

                               "updated_at": int(time.time())

                               }


table = db.weechat.followers

print table


# 각 유저의 Twitter친구 목록:

# 본인 id,  [ (친구 id , 친구 screen_name, 친구와 친밀도]



table.insert({"id":123456, "flist":[(100001, 10), (100002, 20)]})

c=table.find({"id":"123456})


# 각 유저의 자기가 속한 방들의 목록

# 방의 id는 room token

table = db.weechat.myrooms

print table

table.insert(

{“uid”=12345,

“ismine”=1,    # 1 or 0.  yes/no

“roomid”=”ddcddsd”

)


# 각 방의 정보


table = db.weechat.roominfos

print table

{

                       "creator": uid, # twitter user id

                       "roomid": roomid,

                       "title": title,

                       "created_at": created_at,

                       "members": members,  [ id1, id2, id3]  # twitter user ids


}


--

db.weechat 대신에

db.weechat2 라고 만들어서..

특히 twitter id는 int

twitter screen_name 은 string








-----

javascript json rpc:: http://easyxdm.net/wp/



Weechat2


1) users

id : Int

screen_name : String

name : String

100001

Mungqoo

yyyy

100002

Lullujune

xxxx

100003

xxxx

zzzz

100004

merong

LeeBado


2) followers

ID: Int

Flist:Dictionary list

100003

"flist":[(100001, ‘yyyy’, 10), (100002, ‘xxxx’ ,20),(100004,’LeeBado’, 30)]


3) myrooms



4) roominfos

roomid: String

title: String

createtime: String

creator: Int

guests: Int list

“akdptmxmfh”

project1

2011-08-02 14:30

100001

[100002,100003 ]

“dkskaxkdnj”

project2

2011-08-02 15:03

100004

[]




== 친밀도 계산

tweepy이용

나자신 me = api.me()

me.id


msgs = api.mentions()

dmesgs = api.direct_messages()


mention 중에 내가 보낸 것은 1점 // 구해지지 않음. 제외

mention 중에 내가 받은 것은 2점

DM 중에 내가 보낸 것은 2점 // 구해지지 않음. 제외

DM 중에 내가 받은 것은 4점


mention의 author.id == me.id 이면 내가 보낸 것


== 웹페이지 넘겨주기

[ (id, score, s_name, name,  img_url)]


---\

import json

from pymongo import json_util


allusers=json.dumps(users, default=json_util.default)

usersjson=eval('('+allusers+')')

print usersjson


flist= json.dumps(my_flist,default=json_util.default)

flistjson = eval('('+flist+')')

print flist


               self.render("user_socialgraph.html", userjson=usersjson, flistjson=flistjson)


==


채팅 서버 경로: /home/pjm0616/chat/a.py

테스트용 클라이언트: /home/pjm0616/chat/web/


REQ: chat.weechat.kr/create


JSON = { “roomid”: “fsdfdsfckckmd”, “token”: “fdsdlkkcds”}


chat.weechat.kr/adduser?roomid=xxxx&token=yyyy

JSON = {“token”:”fdfdsfdsf”}


REQ: chat.weechat.kr/chat?roomid


REQ: chat.weechat.kr/chat?roomid








{‘cmd’:’id’, ‘uid’:”uno4vuasorcuos”, ‘roomid’:’asp9umf9er’}

{‘cmd’:’msg’, ‘msg’: “메시지”, ‘from’:’’}

{cmd’:’join’, ‘who’:’awceacr’}

{‘cmd’:’leave’, ‘who’:’asiuc3ac’}





------- 8/23 최종 설계  (graph 화면, weechat 서버, chat 서버 연동 방법)




weechat.kr 의 user_graph 화면에서 친구들 중에서 대화할 사용자 클릭

weechat.kr/create?partner=상대방사용자id   로 새로운 채팅 창이 뜸

weechat.kr/create?partner=상대방사용자id&title=hihi


  



위 페이지에서 chat.weechat.kr:19999/p/create 에 접속하여 방을 만든 후

사용자를 weechat.kr/chat?room=방ID

로 이동시킴


-->

self.render("chat.html", roomid=roomid, twt_uid=twt_uid)


weechat.kr/chat?room=12321312 에서는 자바스크립트를 사용하여

chat.weechat.kr:19999/ws/chat 으로 웹소켓 연결 후 채팅

웹 소켓 연결시는 방id와 유저id(트위터상의 숫자로 된유저id가 필요)


웹 소켓 연결 후 새로운 사용자가 채팅에 참여하면

그 사용자의 유저id를 weechat.kr/getuserinfo?id=유저ID 와 같은 식으로 접속하여 AJAX로

해당 유저id에 대한 정보(닉네임 등)을 받아옴



---------





'Cloud Computing > NoSQL, DB' 카테고리의 다른 글

tornado, tweepy, twitter API  (0) 2013.07.25

WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스


http://charsyam.wordpress.com/  -- cloud 관련 전문 개발자 블로그


AWS 장애로 부터 Netflix 가 배운 교훈(201207-06)

http://techblog.netflix.com/2012/07/lessons-netflix-learned-from-aws-storm.html



http://www.ddaily.co.kr/news/news_view.php?uid=92003


2012.6 정전발생 (North Vignia) → Heroku, Pinterst  등 8시간 장애

http://aws.amazon.com/message/67457/


2011.9  아일랜드 더블린, 번개로 인한 서비스 장애

2011.4  미국 동부지역, 데이터 복제 문제 발생 (EBS)

다양한 해외 의견들을 첨부합니다.

http://blog.cloudharmony.com/2011/04/unofficial-ec2-outage-postmortem-sky-is.html

http://justinsb.posterous.com/aws-down-why-the-sky-is-falling

http://status.heroku.com/incident/151


→ 서비스 인프라를

여러 곳에 분산시키는 멀티-클라우드 전략이 필요하다고 지적하고 있다



만약 퍼블릭 클라우드 환경에서 서버를 구축할 예정인 분들께서는 사전에 아래의 여섯 가지를 꼭 확인하고 고려하셔야 합니다.


1. 클라우드는 기존의 호스팅 환경보다는 상대적으로 안전하지만 대신 문제가 생기면 오히려 복구는 더 어렵고 오랜 시간이 필요하다.


2. 클라우드 장애에 대비해 물리적으로 복수의 장소에 다중화를 해둬야 한다.


3. 복수의 서버중 어느 한 곳이 죽더라도 시스템 자체가 죽지 않도록 설계한다.


4. 물리적으로 별개의 장소에 수시로 백업을 하도록 정책을 세워야 한다.


5. 문제가 생기면 최대한 빨리 다른 클라우드나 다른 서버로 라우팅을 돌릴 수 있도록 준비해두어야 한다.


6. 일단 사고가 나더라도 대부분의 경우 데이터는 안전하게 남거나 복구 가능하니 너무 패닉에 빠지지 않는다.



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

http://platum.kr/archives/8563


http://rocketpun.ch/company/qualson/





‘대기업과 스타트업의 상생을 꿈꾼다!’ 퀄슨 박수영 대표 인터뷰

최근 수년간 다양한 인큐베이팅 프로그램과 엑셀러레이션 프로그램을 통해 다수의 스타트업이 담금질 되고 레벨업되어 시장으로 나오고 있다. 오늘 소개할 ‘퀄슨(Qualson Inc.)’도 대기업 공모전과 엑셀러레이션 프로그램을 통해 시장에 등장한 스타트업이다.

퀄슨 박수영 대표에 대한 첫 인상은 참 반듯해 보인다는 것이었다. 또한 인터뷰어의 질문을 일일이 수기로 적어 순서에 맞춰 하나하나 차분하게 답변하는 것도 인상적이었다. 또한 인터뷰 당시에도 느꼈지만, 녹음파일을 들으면서 새삼 느낀 것은 버릴 말이 별로 없는 인터뷰이라는 것이다. 인터뷰를 수 십번은 해본듯한 경험많은 CEO를 연상시켰다. 그만큼 준비가 잘 되어 있다는 것이리라. 각설하고.

삼성SDS 멀티캠퍼스와 함께 모바일 외국어 학습 서비스를 들고 시장공략에 나선 퀄슨 박수영 대표를 만나보자.



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스


해외진출 가능 서비스로 평가 받은 서비스 및 회사 입니다.


미래창조과학부(장관 최문기)와 한국콘텐츠진흥원(이하 KOCCA, 원장 홍상표)은 스마트콘텐츠의 글로벌 진출 확대와 수출역량 강화를 위해 오는 9월 미국 샌프란시스코에서 개최되는 ‘테크크런치 디스럽트 (TechCrunch Disrupt SF 2013)‘에 한국 공동관을 운영하기로 하고, 이에 참가할 기업 8팀을 선발하였다.

국내 스마트콘텐츠 기업의 미국 진출에 앞장서온 KOCCA는 테크크런치와 파트너쉽을 체결하여 행사기간인 9월9일부터 11일까지 한국공동관을 운영하며, 국내 유망 스마트콘텐츠 8개 기업의 비즈니스 활동 및 콘텐츠 홍보마케팅을 지원한다.

심사를 통해 선발된 한국공동관에 참가할 기업들로는 SNS를 활용한 실시간 여행 정보 서비스 플랫폼 ‘my TGIF’의 아이포트폴리오, 소셜 번역 서비스로 해외에서 먼저 주목받은 ‘플리토’, K-pop 안무를 오리지널 안무가로부터 배우는 ‘Original K-pop Dance’의 와즐엔터테인먼트, 연상어 데이터베이스를 기반으로 한 영어단어 테스트 ‘레벨펌프’의 트윈워드, 본격적인 라이프 스타일 사진앱 ‘메모리안트’의 에이엔티홀딩스, 모바일 포트폴리오 서비스 ‘플래닛 잭’의 이지웍스, SNS를 기반으로 한 지식인 서비스 ‘1024’의 로그인디 등 8개 기업이다.

이들 기업은 아래와 같은 혜택을 제공받게 된다.

  • TechCrunch Disrupt 컨퍼런스 참가패스 제공(약2천불 상당) / 업체당 최대 2장
  • 한국공동관 내 업체별 쇼케이스를 위한 테이블 제공(기자재는 업체 준비) 
  • 업체별 배너, 공동홍보물 지원
  • 업체별 최대 2인의 항공료 50%지원(이코노믹 좌석에 한함, 1인당 최대 90만원)

올해 KOCCA에서 두 번째로 운영하는 테크크런치 한국공동관에는 성공적인 국내 출시 이후 해외 진출을 계획하고 있는 기업부터, 국내보다 해외에서 먼저 주목받은 기업에 이르기까지 다양한 면면의 기업들이 선발되었다. 선발된 8개 기업들은 유망 벤처기업 발굴로 유명한 테크크런치 행사에서 세계 각지의 저명한 엔젤투자자 및 벤처캐피탈리스트들과 비지니스 미팅을 가질 예정으로, 글로벌 진출을 향한 큰 기회의 장을 마련할 것으로 기대된다.



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=056&aid=0000007377


설립 14년만인 지난해 2조 3천억원이 넘는 매출을 올려 전국 35개 신문 매출과 맞먹고 방송 3사 매출 합계에도 크게 뒤지지 않습니다.

게다가 영업이익은 무려 7천억원을 넘어 간신히 적자를 면하기 일쑤인 신문 방송과는 비교 자체가 무의미할 정돕니다.


WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,

python 및 머신러닝 교육, 슬로우캠퍼스

자료 소스



WRITTEN BY
manager@
Data Analysis, Text/Knowledge Mining, Python, Cloud Computing, Platform

,