顯示具有 Social network 標籤的文章。 顯示所有文章
顯示具有 Social network 標籤的文章。 顯示所有文章

2011年9月28日 星期三

[筆記] Building social networking service with DIASPORA* on Heroku

_2011-09-29_12

Looks familiar? It's not Google+. It's DIASPORA. An open source project that implements a distributed social networking service. This project was announced on APRIL 24, 2010 (Just right after Facebook f8 2010 that is at APRIL 21). Alpha version was released at NOV 23, 2010 (two days before my birthday :P). 

According to this, Mark Zuckerbug also donated to it just because it's a cool idea.

It's built on Ruby on rails. So it might be not so difficult to port it to Heroku platform which is a nice RoR host (althrough it still took me some time). It might be easier than build from scratch on a Linux. 

I'm a newbie to these two (Heroku and DIASPORA). I'm also not familar with RoR. Here records steps I tried. 

create an application on heroku

First, you need to create an application on Heroku. There are several platform stack on Heroku. Cedar stack might be the newest and most powerful one. It supports several languages and frameworks. And It also makes it very easy to deploy RoR applications. 

You need to install heroku CLI before creating an application. And use "heroku login" to login to your heroku account.

Run the following command to create a new cedar application (assume application name is "mysocialy") --

heroku create --stack cedar mysocialy

After the application created, you'll have a url "http://mysocialy.herokuapp.com/" for your site. And a git repository: git@heroku.com:mysocialy.git

import source codes

Get DIASPORA* source codes from git hub:

git clone git://github.com/diaspora/diaspora.git

Get your source codes from Heroku git repository (you'll get an empty folder):

git clone git@heroku.com:mysocialy.git

If you have trouble to download from Heroku. Try to use "heroku keys:add" to add your ssh public key and try again.

Copy all files except ".git" folder from "diaspora" to "mysocialy".

Initial configuration

Make new configuration files from example.

cd config

mv application.yml.example application.yml  

mv database.yml.example database.yml

Edit application.yml. Make "pod_url" to your host. In this case:

pod_url: "http://mysocialy.herokuapp.com/"

Deploy codes

Add and commit files:

git add .

git commit -am 'initial import'

Push them to Heroku

git push origin master

The coolest thing that Heroku does is that it makes deploy codes so easy. All you need to do is to push your codes to its git repository. And it could also install all related modules for you (that is configured in Gemfile). Super easy.

Ok, I must admit that I lie a little bit. There might be some problems. After I pushes all codes to Heroku, I found there is an error that it couldn't find 'pg' (postgresSQL). Looks like it does not install into gem.

I found the answer that it might be problem with gem version. Need to run "bundle install" at local.  This will generate a new Gemfile.lock. Push this new file to Heroku might solve this problem

Ok, that's all?

Not sure if I missed anything (I might). Anyway, what I did is alive at "http://mysocialy.herokuapp.com/".

2011年9月26日 星期一

Social Network的 人、事、時、地、物

我們的生活周遭不外乎就是以人、事、時、地、物 所構成, 人與人之間的互動, 事件的發生 等等

每個Social Network Service正是在想辦法把我們的生活的縮影給數位化, 網路化

  1. 人: Personal profile, Friends, Lists, Group....虛擬著人與人之間互動的關係
  2. 事: What's on your mind? What's happening? 什麼事情即將發生或發生過(events)
  3. 時: 每個事件, 動作都會帶著時間
  4. 地: Check in是沒意義的動作, 只是好玩, 但如果事件或想法帶著地點就不同了, 那代表事情的發生地點, 或是你在啥地方激發了你的想法
  5. 物: 吃食物, 看電影, 聽音樂, 讀一本書...我們時時刻刻無不跟東西在互動

Google+對Social network的解答是隱私權(Circle), 是分享(Reshare, auto upload), 是溝通(Hangout), 但Facebook卻是從人出發(Profile, Timeline, 最早由Profile), 到Open Graph (與物的互動), 想盡辦法縮影我們的生活, 雖然有很多爭議點, 我認為, 現階段G+還是無法抗衡, 比較起來, Facebook目前還是比Google懂社群 (純個人意見抒發)

[筆記] Translate open graph activity

  1. Go to Facebook developer : https://developers.facebook.com/apps
  2. Select your app
  3. Click "Edit Setting"
  4. Choose "Translate your app" at left hand side
  5. You'll see a form as following. Select your language and translate all messages:

_2011-09-26_6

2011年9月25日 星期日

[筆記][測試] Facebook Open graph + Heroku + node.js

Open graph的確是個好物, 雖然說早在去年的f8就已經推出了, 但現在更加完備了, 其實也等不及看會有啥應用推出了, 當然自己也想來玩看看,  本想照Tutorial依樣畫葫蘆抄一個體驗看看, 又覺這樣太無聊, 又想說試看看heroku + node.js, 沒真的玩過node.js, 就拿這題目試試

今天剛好在Facebook上講到拉麵, 所以就拿我最愛吃的拉麵來當題目了.. :P

web.js和兩個views(index.ejs, men.js)的sources放在這

實作筆記:

  1. Tutorial裡的範例是拿Heroku + PHP, 但其實這跟拿哪一種來實作沒太大差異, 裡面的範例幾乎全部都是javascript辦到的, 所以就算把範例放到其他平台也適用
  2. Tutorial裡的範例比較靜態, 全部實作在html內就好, 我把它改成"/ramen/id"當一個物件, 但每一個物件都還是透過"men.ejs"去render
  3. heroku提供的node.js連結Facebook的範本是透過server side的everyauth+facebook-client, 我把這些都拿掉, 純用Facebook javascript api
  4. 在web.js裡實作兩個uri, "/" (index.ejs) 和 "/ramen/id" (men.ejs), 拉麵資料由web.js在render時傳給template, 目前先寫死
  5. Object debugger是蠻好用的東西, meta data寫錯一直post不出去, 剛開始沒用這抓錯還真不知道錯哪
  6. Social plugin的activity feed似乎不包含自己的

最後在Timeline上呈現的樣子:

用Graph API取得自己的Activities:

https://graph.facebook.com/me/[name_space]:[action_type]/ramen

ex. https://graph.facebook.com/me/soulogramen:eat/ramen

 

 

2011年9月22日 星期四

在Heroku上建立一個以Node.js開發的Facebook應用程式

這篇算筆記, 有可能會有一些失落環節在, 主要從create Facebook application到可以在local端執行

Facebook這月稍早時跟Heroku合作, 讓建立一個Facebook應用程式(含後端)更加方便: http://developers.facebook.com/blog/post/558/ (有些步驟可以從這看)

我選了Node.js當做開發的平台, 以下就是我的步驟:

建立Facebook application

首先到Facebook application page https://developers.facebook.com/apps/ 建立一個新的應用程式

跟以往有點不太一樣的是, 在Application settings裡面多了一個"Cloud Services" -

_2011-09-21_4

目前只有Heroku可以選, 我猜以後搞不好會有更多合作對象吧

選了Provider之後, 接下來就要選擇平台, 目前有PHP, Python, Ruby, Node.js可選, 選擇算蠻多的了, 這邊選Node.js

_2011-09-21_4

經過一些有的沒的之後, 就會有這畫面, 這邊已經完成這個應用程式的基本雛形了

_2011-09-21_4

設定你的heroku應用程式

到 https://api.heroku.com/myapps 去設定你的應用程式, 在這邊你可以修改應用程式名稱, 不過比較麻煩的是, 這邊的修改並不會同步回Facebok, 因此修改後還是需要回Facebook去更改相關設定:

_2011-09-21_4

在你的電腦執行

一般在程式沒完成前大多都不會想直接佈署上去, 能在自己電腦先執行驗證過是比較容易抓蟲的

以下是先需要安裝的

heroku command line -

heroku是用gem安裝的, 所以安裝前要先確認你電腦有沒安裝Ruby, heroku安裝方法很簡單, 只要執行 "gem install heroku"

安裝好後先用"heroku keys"看看有沒存在的key, 有的話可能會讓之後要用git抓資料有問題, 有的話用"heoku keys:remove"先移除, 這樣login會產生新的public key

用"heroku login"登入heroku, 第一次使用可能會要求產生public key

登入後就可以用"git clone git@heroku.com:ff8.git"抓下原始碼(ff8是heroku application name)

node.js -

這當然是必須安裝的(在這例子), 如果是在mac上, 又是brew的使用者, 那只要用"brew install node"即可

npm (node package manager) -

安裝方式很簡單, 只要"curl http://npmjs.org/install.sh | sh"

安裝好後, 在git clone下來的目錄下"npm install", 它自然會裝好所有所需的package

foreman -

文件裡面有建議裝, 不過由於這範例只是一個單純的web, 並沒其他worker, 可以不裝

 

設定Facebook application

因為要在本地端執行而不是heroku的雲, 所以要把url都指向本地端, 像這樣:

_2011-09-23_5
設定環境變數

export FACEBOOK_APP_ID=122348222122778

export FACEBOOK_SECRET=1ba1beed9f7b5be9192bf4540c231234

export PORT=5000

(我跑在5000)

如果使用foreman, 就把這些寫在.env中

 

執行

"node web.js"就可以將server跑起來(或是foreman start), 然後到http://localhost:5000/就可以看到結果 

My first "Timeline"

_2011-09-23_4
_2011-09-23_4

Facebook今天發表的Timeline真是令人興奮的功能呀

現在應該再也沒人說很難用Facebook當日記了(雖然我講日記這概念講很久都沒去實現他)...

剛剛我的Timeline也啟用了, 這真的會讓我花很多時間在上面的東西呀...

_2011-09-23_4

連Game都可以有Timeline... XD

2011年5月4日 星期三

[筆記]一些FQLs

本來是放在我EverNotes內的, 貼一些出來好了, 無聊時玩玩的東西, 沒優化過:

  • 共同喜歡的Page : select name from page where page_id in (select page_id from page_fan where uid=friend_uid and page_id in (select page_id from page_fan where uid=me()))
  • 共同朋友: select name from user where uid in (select uid2 from friend where uid1=me()) and uid in (select uid2 from friend where uid1=friend_uid)
  • 同時都出現的照片: select src from photo where pid in (select pid from photo_tag where subject=friend_uid) and pid in (select pid from photo_tag where subject=me())
  • 屬於某Group的照片: select src from photo where pid in (select pid from photo_tag where subject=group_id)
  • 共同參加的活動: select name from event where eid in (select eid from event_member where uid=me() and rsvp_status='attending') and eid in (select eid from event_member where uid=friend_id and rsvp_status='attending')
  • 都去過的地方(僅限於自己checkin不包含被tag): select name from place where page_id in (select page_id from checkin where author_uid=me()) and page_id in (select page_id from checkin where author_uid=friend_uid)
  • 喜歡過的某人的post:  select message from stream where post_id in (select post_id from like where post_id in (SELECT post_id FROM stream WHERE source_id=friend_uid) and user_id=me())
  • Comments on someone's post: select text from comment where post_id in (SELECT post_id FROM stream WHERE source_id=friend_uid) and fromid=me()

其中"me()"是自己, 有些FQL裡的"me()"可以代換成另一個人的uid

2011年5月1日 星期日

Recognize your friend with Face.com

替照片上的每個人都加上標籤(tag)是一個蠻好用的功能, 這可以方便你找到有某人的照片, 或是一群人在某時的合照, 如果善加利用是相當好用的功能, 目前主流的幾個相片服務像是Flickr, Facebook, Picasa等等, 都有這樣的功能

其中以Picasa的功能最為先進, 它可以自動幫你把你所有照片裡的朋友都挑出來標示, 不像Flickr跟Facebook就只能手動

如果每張照片都只能手動標示的話, 標示完所有的照片是很累人的, 更何況可能還有很多未標示的舊照片, 就這點來說, Picasa就強勁很多, 至於Facebook和Flickr呢? 所幸有Face.com

Face.com是一個做自動標示的服務, 其實這樣講有點狹隘, 自動標示照片的服務只是它其中一個產品 - PhotoTagger, PhotoTagger的用處就有點像Picasa做的一樣, 自動幫你把照片的人物找出來做標示:

_2011-05-01_8
當然準確度不會到100%那麼高啦, 不過加上手動輔助的話, 已經可以節省不少功夫了

此外還有PhotoFinder和CelebrityFindr....不過這些並不是重點, 它真正比較強大的是, 它乾脆把它的Face detection和Face recogintion 的API開放出來, 讓你可以利用它們的雲端運算做出自己的應用

它的API是以REST的形態提供的, 支援的後端服務有Facebook, Flickr, Twitter, 基本的API也大致相當完整, train, detect, recongnize, tag等等, 如果是做Facebook相關的應用, 甚至可以省略過train的部份, 就可以達到辨識的效果

當然, 剛剛的應用像是PhotoTagger都是以拍完後的照片為目標而做的, 如果拍照完後馬上就可以找出有哪些人可以tag的話, 那就更棒了

為了實驗這個我寫了一個簡單的Android app - Face.me , 只要拿著Android手機對著你朋友拍一張(按螢幕畫面), 它就會利用Face.com去找出你這朋友的名字 (可以從連結下載APK安裝, 因為Camera部分不熟, 寫的不太好, 可能會有bug, 就不open source了 :P) 

這App利用了一個open source的Face.com的Java lib叫face4j, 基本上這lib移植到Android上並不困難, 它用到一些apache commons, http的library, 只要把這些含入就可以

要開發這個, 首先你必須要有Facebook API key和Face.com的API key, Face.com的API key可以到這裡註冊個新的, 另外還得把Facebook的API key和secret註冊到Face.com上(看你信不信任它囉)

Facebook API的部份, 我是用Facebook Android SDK去開發的, 其實也沒用到幾個API, 大致上只有login和取得自己的UID而已

另外由於face4j在reconigize這個method只支援檔案跟url兩種方式, 我另外修改了一個支援input stream的:

https://gist.github.com/950492.js?file=gistfile1

 

剩下的部份就簡單了, 在Camera.takePicture的第三個參數的PictureCallback.onPictureTaken裡加上:

 

2011年4月24日 星期日

The Truman show and Facebook

很久之前就有這篇的構思, 兩天前又想到, 又忘了寫下來了, 趁這時候記憶還新鮮時, 再來寫一次

Social network和隱私權的問題已經是被探討到爛了, 很多聽到大多是負面的, 我倒也不想從"好"或"壞"出發啦...只是每次這個主題都讓我想到一部Jim Carrey的一部電影"The Truman" Show

The Truman Show

這是一部已經十幾年的電影了, 是Jim Carrey所有電影內我最喜歡的其中一部(另一部是"23"), 電影內, Truman是一個生活在一個虛假的人生的可憐蟲, 所有的人生是假的, 朋友也是假的, 所有的一切只是為了一個受歡迎的節目 - "The Truman Show"

倒也不是說這種事情可能發生在現實面, 或是說有可能發生在網路的世界, 只是覺得, Truman之所有會有這樣悲慘的人生, 主要出自於, 人類"窺探"的慾望, 這也就是狗仔一直會存在這世界的原因

人對自己以外的人, 或者關心, 或者好奇, 總會多多少少有著想知道, 別人"怎麼了?", "在想什麼?", "去了哪裡了?", 有時候就算是事不關己也會有好奇想窺探的心態(這也就是八卦雜誌為啥那麼好賣的原因了)

那這又跟Social network, Facebook 有什麼關係呢?

記得在電影"The Social network"裡面有一段說到, 當你在課堂上看到一個正妹, 你可能就會迫不急待的想回宿舍開啟Facebook查看她的資料, 甚至"Poke"她, 如果Facebook是一個相當封閉的朋友網路, 那你就不可能做到這樣的事情

以往, 你可能要碰到朋友才可能跟他聊起彼此最近碰到的事情, 或許你平常很想知道他怎麼了, 但電話, 信件卻不一定即時聯絡的到, 就算聯絡的到, 也不見得可以一定聊到你感興趣的雞毛蒜皮的小事, 但現在的人, 大概就是三不五時的不管在電腦前面, 或是走在路上, 都想連上Facebook看看朋友(甚至不是很熟的)的最新狀態

人是群體動物, 不一定能夠很容易克服獨自存在的孤獨, 渴望的知道同類的事, 渴望隨時與同類做溝通, 總是希望可以知道的越多越好

但從另一方面來說, 人是很矛盾的, 在渴望對同類的"知"外, 也期待的擁有自己完全的隱私

Facebook並不是第一, 也不是唯一的Social network, 但它是非常成功的, 雖然, 就算是網路巨人Google也擁有Orkut, 但現在卻也端不出可以來迎擊的菜, 反而備受威脅, 為什麼? 就隱私權保護, 就社交功能上來說, Facebook都不是很好, 很多基本功能也只能說是普普而已, 但我覺得Facebook之所以會吸引到這麼多人, 原因就是在於做這些東西的人, 一開始的思考方式本來就不是在提供大家一個實用好用的工具, 而是只是為了"好玩"

"好玩"這件事很重要呀, 為了好玩, 才有可能無所顧忌的想盡辦法去做一些好玩的事, 如果只是死板板的為了功能而做, Facebook只會是另一個Orkut而已, 不會是Facebook

很不幸的, 工作上總碰到人把Facebook當做實用性的工具在做, 如果它不好玩, 就不會吸引人家來了...

2011年3月12日 星期六

[Facebook][筆記] 尋找user id和page id

自從Facebook可以讓user指定name後, page和profile的url就變成這形式了:

http://www.facebook.com/YoYoMa

雖然說Graph API可以用name, 但對REST API和FQL就大多需要ID, 傷腦筋

還好, 這些還在html source裡面, 打開查:

fbpage_id=80753646336

這邊80753646336就是YoYoMa的page id, 至於uid, 就用"uid="當keyword去查

2010年12月29日 星期三

社群問答網站 Quora

講到問答網站, 可能會想到的是Yahoo奇摩知識家, 如果是developer可能會想到StackOverflow

不過今年有另一個新型態的問答網站崛起, 就是以社群(Social network)為基礎的

這之中有一個由前Facebook CTO所創辦的Quora最近還蠻受注目的(至少是吸引到我的目光 :P)

最近看起來TechCrunch就很喜歡上Quora挖資料挖訊息:

詳見: Q: What Does Quora Mean For The Future Of Blogging? A: Business As Usual

 

Quora跟傳統問答網站不同的是, 它會依據你的興趣來列出關於你感興趣的主題的問題, 這樣一個好處是, 你會感興趣的東西通常會是你也會想知道答案, 或是你會知道答案, 這樣一來, 問出問題被有效回答的機率也會比較高

而他靠什麼來判斷呢?當你把你的Facebook帳號跟Quora帳號連結一起時, 它就會去Facebook找出所有你喜歡的, 建議相關的主題給你Follow, 還會自動Follow你Facebook上你也follow的朋友, 並且會根據朋友follow的主題來建議你, 這樣一來, 對於你喜好的精準度的掌握還算蠻高的, 你問的問題也有更大的機會讓真正對這主題專精的人回答

此外, 我最喜歡的功能是, 不但人, 主題可以follow, 你也可以去追蹤某個問題, 隨時可以得知有沒人對這個問題給一個不同的或是新的答案

有時候令人驚奇是, 出來回答你問題的人可能會跟這問題直接相關的人, 比如說你可能問一家公司的狀況或是相關問題, 搞不好這家公司的相關人士(甚至CXO)都跑出來回答你....

2010年12月7日 星期二

Social networking with mobility

本來想寫一篇這主題的, 後來想想, 跟自己工作太過接近, 寫了也不好, 所以這篇單純來推薦一篇好文:

Social Networking: The Future

其中的"Social Graph will become portable", 其實我想的稍微多了點, 不過還是先推薦這篇就好

2010年12月4日 星期六

BBS and Social Networking

早上看到這篇文章, 興起了寫這篇的念頭, 雖然說自己也應該大約十多年沒玩BBS了

現在在台灣所說的BBS跟早期流行的BBS其實是不同的, 早期流行的BBS是撥接式的, 還記得我在高中的時候, 因為看到國小同學在玩, 也去買了台modem玩起了撥接的BBS, 早期由於Internet尚未興起, 因此訊息的交換就是透過這種方式, 一般的使用者利用數據機撥接到BBS站台下載訊息回來, 然後利用像是藍波快信(Blue wave)這類的軟體離線閱讀和回覆, 然後下次撥接的時候在把內容上傳, 除了討論區外, 還可以分享檔案, 而BBS站台的主持人通常會申請的一到多線電話讓人撥接進來, 利用半夜的時間與其他站台交換信件跟資料, 以現在的觀點來看雖然是很落伍, 不過當時其實還蠻多人玩的不亦樂乎的

現在台灣流行的BBS像是PTT, 並不是這種形式, 而是一種架構於Internet上的telnet型態的BBS, 在台灣, 早期也是在學術網路(TANET)上崛起, 這一點跟Facebook的起源有點像

記得大一剛搬進宿舍時, 我也把電腦跟Modem帶了去, 學長一看到我有Modem就很高興的問: "學弟, 你也玩BBS呀? 要不要玩學校的BBS", 那時候我認識的BBS也只有舊式的BBS, 並非telnet型態的BBS, 但由於此時並沒所謂的宿網, 要連接到TANET上也是要透過撥接的, 所以玩telnet型態的BBS也是得需要有台modem (當時我擁有的是一台19200 bps的modem) , 也就這樣, 我就栽進了這個BBS的世界, 我還記得我的第一個ID是DOTT是以一個當時蠻喜歡的電腦遊戲: Manioc Mansion: Day of the tentacle命名, 後來又改名叫bCat (babycat)

後來學長kaoc架設了系上第一個BBS, 我因為有興趣, 也就跟著一起維護, 後來也就接下了所謂的sysop的職務, 當時的時間幾乎都奉獻給BBS, 不是在上面打屁聊天, 就是想盡辦法改進它的程式, 增加新功能, 一路上從Phoenix BBS, Firebird BBS, Secret lover BBS, 玩到Maple BBS(以上都是BBS版本) , 還試著去做出Web BBS(當時用C + CGI + NCSA Httpd), 一直到被二一 :P , 我資料結構的觀念可以說是BBS程式教我的, 不是後來念資訊系才懂的.. :P

講了堆廢話, 不過那不是我要說的重點

可能有人會認為, 如果台灣之前出現像是Facebook這東西, 那就會是PTT

這是無可否認的, Facebook上出現過的東西, 在以前BBS上其實都已經出現/實現過了, BBS不只是一堆討論區的集合而已, 如果要討論區, 當時已經有俗稱news的usenet, 而且其實跨站的BBS文章的交換基本上也是透過usenet去實現的

除了討論區之外, Facebook上現有的功能, 像是chat (BBS上的talk, 一對一), ping, 在BBS上也老早就有, social games, 很早在BBS上也流行過QK麻將, 還有像是個版, 也可以看成像是另一種型態的personal "wall", 此外還有些現在看似先進, 但其實BBS以前都已經流行過了, 比如說public/private chat room (Facebook一直到Group發表後才有類似的功能), 還有一些Facebook並沒有的東西, 像是看板等等...

用過Facebook group的人可能會發現, 使用者也可以透過e-mail來發表文章到Group wall上面去, 這種mail post的方式, 其實也是已經在BBS上出現快有20年了, 並不是很新鮮的idea

近幾年, Facebook等新型態的Social network 服務改變了很多人與人之間互動及溝通的方式, 但很多這些東西, 其實很早點時候在台灣的學術網路上就已經很盛行了, BBS可以說是一個早期Social network典型的代表, 雖然以telnet的方式來連接, 在現在的觀點看來或許已經不合時宜, 但很多觀念, 還是可以值得去吸取, 並且拿來應用在現在新型態的Social network服務上的...