over 4 years ago

Versions

官網

  • v0.1.1 - 新增Pastie文章貼上轉直書功能!
  • v0.1 - 新增Chrome Extension直接分享功能!

Chrome Extension

  • v0.4.1 - 新增Browser Action,瀏覽器上直接可以貼直書!
  • v0.4 - 現在可以分享你的文章囉!
  • v0.3 - 英文支援(滑鼠移上去會顯示完整英文)
  • v0.2.3 - 新增標點符號置換功能
  • v0.2.1 - 0.2版有漏字bug,已緊急修復
  • v0.2 - 修正不會換行的bug
  • v0.1 - Beta 0.1版本

Intro

今天晚上看了幾篇文章,看著看著突然覺得「阿,如果能用直書看該有多好!」
但偏偏網站超少有直書形式的阿!於是乎興起了寫一個反白就可以看直書的Chrome extension的念頭~

如果和我一樣看小說喜歡看直書的話,立馬安裝這個extension吧!

Snapshot

未來構想

  • 增加設定功能,包含設定字型、介面等功能
  • 增加「我的書本」功能
  • 雲端同步功能
 
over 4 years ago

大地遊戲對戰組合產生器

http://ensky.tw/GroundGame/

簡介

最近辦營隊時發現,不少人在設計大地遊戲的時候,覺得最困難的不是怎樣設計活動,反而是如何產生對戰組合。
大地遊戲的對戰組合,通常是兩兩對戰,可以調整的參數有「隊伍數」、「關卡數」、還有「跑幾關」,
而還有一些限制,比如說對戰過得隊伍不能重複對戰、跑過得關卡不能再跑一次之類的限制,
總而言之這種東西人工算起來實在是非常麻煩,而這種暴力解法剛好就是電腦最善長的領域,
我們只要設定好列舉的方法,以及驗證的條件,就可以成功算出結果。

實做

一般而言大家想寫程式,除了特殊考量之外(ex:效能、平台),第一個選擇的就是自己最熟悉的語言,
而我最熟悉的語言便是PHP,因此就直接用他來實做。

演算法說起來也是沒有很複雜,
一開始我打算用隨機產生的方式來製造出對戰組合,沒想到速度慢到誇張,才跑幾個回合就開始需要等待了,
聽從邱渣的建議改採列舉組合的方法,速度才有顯著提昇。

列舉方面我是由回合=>關卡下去遞迴的,一開始先跑第一回合第一關,再來是第一回合第二關,以此類推下去跑到設定的參數為止。
先在每一回合第一關的時候產生出隨機的對戰組合,再來一關關跑下去,若發現條件不合則退後跑下一個組合,如此一來就可以把所有組合全部跑完。

瓶頸

我遇到最大的瓶頸是在於「語言本身」...
因為我和邱渣都對於這個project滿有興趣的,我和他分別採用PHP和C++撰寫,
結果他的硬是快上非常多(即使我跑得次數少很多),
他的大約跑100萬次以內都可以瞬間出來,
我的大約5~10萬就開始要等待時間...

因此最後的成果部份將改成網頁呼叫C++程式來執行。

成果

邱渣那邊還要作一些效能調校&介面整合的步驟,
因此我先用原本寫得php上線,成果如本頁最上方網址所示,
目前是採用ajax longpolling作運算,
未來應該會改成背後的worker作運算,並將結果存到Database,
加快反應速度,也比較能接受龐大的測資。

 
almost 5 years ago

Versions

  • v0.2.6 - 將所有圖都改成圓角
  • v0.2.0 ~ 0.2.5 - FB偷偷換圖,一直修正
  • v0.1.9 - 6/20 FB偷偷改版
  • v0.1.8 - 留言區塊、動態時報美化
  • v0.1.7 - 載入速度變快一點點
  • v0.1.6 - 讓顯圖變圓的、上方選單圖邊框修正。
  • v0.1.5 - 一大早起來fb就改版了= =只好修正。
  • v0.1 - Beta 0.1版

Intro

Facebook的藍藍畫面已經看膩了嗎?
你比較喜歡Google+ 的介面?

你可能需要試試看這個XD

2012/6/2 盛大推出(誤)

Download

Snapshot


 
almost 5 years ago

All in one link

其實官方wiki寫的很清楚了,
直接到那邊就可以看到如何安裝、如何測試等等。不過我這邊還是記錄一下我的步驟,以及我遇到的困難及解法。

Overview

既然是要做map-reduce,所以先來份code。

這份code裡面就是基本的word count,

function version

def mapper(key, value):
    for word in value.split():
        yield word, 1

def reducer(key, values):
    yield key, sum(values)

if __name__ == "__main__":
    import dumbo
    dumbo.run(mapper, reducer)

可以看到mapper function負責map, reducer function負責reduce,是透過dumbo.run來註冊。

class version

你也可以用class來做mapper和reduce的動作,就可以定義__init__在initilize的時候執行一次就好,減少一些overhead。

class Mapper:
    def __init__(self):
        file = open("excludes.txt", "r")
        self.excludes = set(line.strip() for line in file)
        file.close()
    def __call__(self, key, value):
        for word in value.split():
            if not word in self.excludes:
                yield word, 1

def reducer(key, values):
    yield key, sum(values)

if __name__ == "__main__":
    import dumbo
    dumbo.run(Mapper, reducer, reducer)

可以看到__init__是constructor,一開始會被執行一次;__call__是真正執行的function。

Installation

https://github.com/klbostee/dumbo/wiki/Building-and-installing

Note

若你打算使用國網中心的hadoop,直接看到virtual Python environment的解法即可。

Running

dumbo允許你單機進行測試,單基測完沒問題可以放到hadoop上測試,減少開發時間。

詳細說明
https://github.com/klbostee/dumbo/wiki/Running-programs

Notes

有關Running這邊實在吃了不少苦頭,於是把一些常見問題放在這裡以資各位參考。

  • 共同
    • 每次都要刪除舊檔案很麻煩 -> 參數加上 -overwrite yes
    • 出現Memory error -> 記憶體不足,因為預設的記憶體限制很小,參數加上 -memlimit 1073741824
  • Hadoop only
    • Output出現亂碼 -> 參數加上 -outputformat text
    • 只用到兩個mapper, 一個reducer -> 預設參數是這樣,要設定參數: -nummaptasks [a number]
 
almost 5 years ago

其他issue

筆者遇到的小問題

  • 明明在ServiceConfiguration.cscfg裡面將Worker的Instances設為10了,為什麼還是不會變?! 經測試,
    package create -in="SOURCE DIR" -out="OUTPUT DIR" -dev=true
    這行指令並不會把新的ServiceConfiguration.cscfg複製過去OUTPUT DIR(很有趣) 所以你可能要手動去OUTPUT DIR將那邊的ServiceConfiguration.cscfg改正才行
  • Azure的Compute Emulator跑第二次就出現 Role status Unknown 這我也常常發生但還沒找到好的解法,我的作法是直接把Compute Emulator shutdown & restart兩次就好了= =
 
almost 5 years ago

前言

DataMining這門課第一次作業要建立FP Tree來分析Frequent Itemset,有分三部分:

  1. 單機版
  2. Map Reduce on Window Azure版本
  3. 第二版本改善效能(bonus) 由於筆者最擅長的語言是PHP,就打算用PHP撰寫之。

安裝

  1. 先照著這篇文章來安裝 PHP + Windows Azure SDK + SQL Server Express
  2. 再照著這篇文章來安裝 Windows Azure SDK for PHP 以及學習如何測試開發

試跑

上一步驟做完應該已經會產生package了,現在要來跑跑看,請參考這篇文章來用用看phpinfo();

安裝 Q & A

你可能會遇到一些神奇的問題

  • PHP 安裝失敗

很妙的是Microsoft Web Platform Installer他並不會自己幫你裝好IIS,你要去控制台->程式與功能->開啟或關閉windows功能把它設定成至少這樣才能開始安裝PHP

  • 404 Not Found

根據筆者的經驗,Microsoft Web Platform Installer安裝的php版本會是壞掉的(很妙,啊?),檢測方法是去C:\Program Files\PHP\v5.3\下點開php.exe和php-cgi.exe看會不會炸掉,
如果OK就可以,不行的話你可能要去PHP for Windows官網找5.3 Thread safe zip
請自行備份舊檔案,解壓縮新檔案到同一個資料夾,再把舊的php.ini複製進去新folder。

然後呢,你可能會繼續404 Not Found,此時很有可能是IIS並沒有自動幫你設定好FastCGI & enable PHP。

請進入控制台->系統管理工具->IIS管理員->FastCGI設定然後這樣設定



然後回到IIS管理員進去PHP管理區啟動PHP

之後看看行不行,不行就google看看囉,或看這裡搜尋404,至少我是這樣解決的。

Reference

 
almost 5 years ago

前言

最近系計中買了VMware vSphere平台的授權,當然要好好的用一下。
灌完FreeBSD9之後發現效能居然還比Ensky.tw這台實體機來的快!
因此決定把vSphere的VM偷兩部過來當做Load balance的Web server。

設定

原本那兩台採用DHCP + DDNS綁在某個hostname上面,因此打算使用CNAME做loadbalance的record,
google之後才發現CNAME沒辦法設多筆!因此我把host用A record綁在cdn.ensky.tw上面,
想要load balance的server再用CNAME指到cdn.ensky.tw上

設定其實非常簡單,就只是一筆DNS record上綁很多個A

cdn             A       10.0.0.1
                A       10.0.0.2
                A       10.0.0.3

然後再把你要load balance的hostname導到cdn上面去

www                CNAME   cdn

好了!從此之後你的www就可以自動分散流量到10.0.0.1~3上面囉!

後話

其實這個作法並非非常理想,為何?
因為假設某台Server突然死掉了,本架構並不能做到fail-over,
也就是如果client很不幸的連到死掉的那台server,一樣會噴404 not found,
你會說,那我就寫隻script檢查有沒有死掉,死掉的話就nsupdate拿掉他就好啦?
但是dns更新需要時間,你就算拿掉該host,client端還是會404一陣子,直到dns快取expire...

這裡比較好的作法可能是用一台server做reverse proxy的工作,
當流量過來的時候自動round-robin導到內部的server pool上面,
而當有server掛掉的時候可以自動導到別台這樣。

改天來研究這個方法:p

 
almost 5 years ago

前言

突然想到我的EnskyComic有存使用者的瀏覽記錄,可以Mining一下
以下資料顯示看了某漫畫的人還會看哪些漫畫,

資料格式

漫畫         漫畫1:關連次數, 漫畫2:關連次數

資料大小

  • Total Records: 76258
    • 總共有76258筆數據
  • MIN_SUPPORT: 300
    • 所有讀者共同閱讀超過300次的漫畫才會出現

資料

獵人
海賊王          獵人:486
火影忍者        獵人:470, 海賊王:448
美食的俘虜      獵人:371, 海賊王:331, 火影忍者:311
妖精的尾巴      獵人:345, 海賊王:330, 美食的俘虜:326, 火影忍者:312
慾望
自殺島
惡魔奶爸
死神            火影忍者:313, 海賊王:313, 獵人:307
國王游戲
大家的H體驗
史上最強弟子兼一
家庭教師HITMAN REBORN!
進擊的巨人
第一神拳

Result

  • 看「火影忍者」的人通常也會看「獵人」和「海賊王」
  • 喜歡看死神的比較愛看火影
  • 掰不下去了orz
 
about 5 years ago

前言

大兜推薦Octopress這個傳說中的「駭客的blog」,可以使用markdown撰寫文章,還有很方便的程式碼上色功能,也不失設計彈性,一聽之下大為心動,就打算把blogger的舊家搬過來。

掙扎

一開始打算利用他寫的這篇文章安裝在Win7上面,不料困難重重,全部都設定好之後仍然無法使用程式碼上色功能,只好試著搬家到FreeBSD上面看看會不會比較方便安裝。

撞牆

原本打算照官網上的步驟一步一步來,但不料iconv的dependency問題一直無法解決(會一直噴找不到iconv錯誤),索性放棄,直接改用FreeBSD的ports, 結果瞬間就好了(不過未來可能會出現ruby版本相容性問題...QQ)

安裝

Install base ruby, ruby-iconv, ruby-bundler

% sudo vim /usr/ports/Mk/bsd.ruby.mk # 將RUBY_DEFAULT_VER?= 1.8 改成 1.9
% sudo portmaster converters/ruby-iconv 
% sudo portmaster /usr/ports/sysutils/rubygem-bundler
% rehash

Next, install dependencies.

% cd
% git clone git://github.com/imathis/octopress.git octopress
% cd octopress    # If you use RVM, You'll be asked if you trust the .rvmrc file (say yes).
% ruby --version  # Should report Ruby 1.9.2 or 1.9.3

Install the default Octopress theme.

% gem install bundler
% rehash
% bundle install
% rake install

OK,完成XD!
可以繼續往下跑囉!

Reference

 
about 5 years ago

Version info

3/10

  • IE8相容性修正
  • Node.js穩定度調整
  • 安全性增強 ## 3/9
  • 新增"換顏色"功能

Intro

用Win7的便條紙一段時間,難免會覺得不能帶著走實在有點不方便,而且各種各類的便條摻在一起雜亂無章,興起了想寫一個便條紙網站的念頭。

於是經過三天的努力,"EnskyNote 便條紙!"網站完成了

Features

如果把它想像成Win7的便條紙的話,他多了以下功能:

  • 多重桌面:你可以開很多張桌面,不同的標題
  • 多人同步操作:你的操作會即時顯示在每個人的瀏覽器上(移動、改變[顏色、大小]等等)
  • 公開連結:擁有連結的使用者可以進來修改(所以連結很長)
  • 註冊很方便,直接登入就可以了

TODO(不一定會做)

  • OpenID
  • pin / unpin
  • Read-only
  • 決定 layer順序
  • 短網址&公開/私人權限設定
  • 出現"正在輸入"的圖案

Known issues

如果你在打字的時候有別人在打同一篇 中文輸入法會死掉

Technique

  • Server: PHP , Node.JS
  • Database: MySQL , Redis
  • Middleware: Socket.io
  • PHPFramework: Codeigniter
  • JSFramework: Backbone.js
  • JSLib: jQuery, Underscore.js
  • AMD: Require.js

Enjoy it!