博文

目前显示的是 五月, 2018的博文

kumoRail項目概述01:GetLate模塊

图片
kumoRail預覽圖及公衆號二維碼    kumoRail是我接觸web編程之後的第一個idea,其目的在於給鐵道迷們提供運轉和拍車上的一些便利,從一年前斷斷續續的做到現在,總算成型了5個功能:正晚點歷史、交路、配屬、時刻和電報碼 查詢。至此稍作一個停歇,也是做一個總結,好好理一下做這個項目的思路體會,爲自己以後再來回顧和重構它的時候,留存一點記憶,也讓更多希望了解這個項目的朋友能夠更容易的看懂它。    kumoRail最早只有正晚點歷史一個部分。12306網站只提供1小時前和3小時后的正晚點信息查詢,所以我們的目標就是要設計一個長時間一直運行的爬蟲來不斷在車到站時候收集該車的整晚點信息,然後寫入數據庫裏面。我將這個進程,或者是叫模塊,命名為 GetLate ,不過,不是睡覺起晚了的意思哈。不過呢現在看起來,它結構過於原始,也不符合Object-oriented的思想,不過總有留存一些方法和思想,得以在再次重構的時候進行參考罷。    getlate.py裏面,loadModule函數只是爲了導入模塊,真正起作用的是getData函數。他會不斷的運行以收集數據。    在getData中,首先導入了schqdb、staqdb、ressdb三個讀寫數據庫的對象,log是寫log文件的對象,因爲supervisor的寫日志會有延遲,故而爲之。queryCache是一個list,會把需要進行查詢的到站信息緩存在這裏,待車到站之後再進行查詢的。    這裏有一個“窗口”的思想。“窗口”有兩個,指的就是在cache中加入待查到站信息和進行查詢的時間範圍。提前加入信息,在過了預定的到站時間3分鐘后開始進行查詢,若查詢成功,沒有晚點則drop掉該條,長時間晚點則更新預定的到站時間,在那個時間再進行查詢,錯誤的話亦會保留,再進行再次查尋。    我本來的想法是在車到站之後3-5分鐘内進行多次查詢,但是這實際上非常不合適。第一個是已經查到正確值的車次會進行再次的查詢,會在數據庫裏面形成重複的數據,浪費流量和數據庫資源。第二個問題是某些車次會產生長時間的晚點,但是在這幾分鐘内,我們收集過後,它的晚點再發變數,我們就收集不到它正確的信息。後來我也想過,事實上最理想的方法是提前在數據庫裏面建立一個該日該車次于該站的到站信息,後面再進行填充和更新。不

第一届微軟學生俱樂部華南編程馬拉松“DEEP HACK”體驗

图片
   也是很偶然的機會,在社團群裏看到了微軟華南HACKATHON將要舉辦的消息。當時還沉浸在因視野限制錯過HACKNYU、HACKFDU、HACKUST的我立刻選擇了報名。從當時至今日已逾月余,但是一路過來,發生了許許多多有意思的事情,很多經歷很多實在令人難忘。    感受到最難得最難忘的就是從零開始的團隊合作。我在學校常年“生性孤僻”,亦較少和班級,或是社團裏面的成員接觸。有時也不只是所謂日久生嫌,亦也有“道不同不相爲謀”之意。再加上難以找到好的團隊,因而難得與人共事,一起爲一個目標而努力工作之機會。此次比賽雖然不太合常理的需要在報名時候即完成組隊,費心思的尋覓也最終讓我找到了兩位異校的朋友,從完全不認識開始,充分進行交流,一步步完成一個項目。    來源、學識都各不相同,理念、習慣亦是各異。大量爭論自然難以避免,有時為一個模塊怎麽實現,常常磨合上近小時。有時,難以實現給與的要求,有常常會氣壘,此時得到同伴的幫助,亦是難能可貴。從最初的分開學習、建模到後面調試,不斷的去靠近去磨合,實在有一種自我升華之感覺。而且,24個小時,我們完全沉浸在項目和代碼裏面,時間流逝飛快,完全忘記疲倦,更是一種難能可貴的體驗。    比賽是由微軟還有SYSU,SCUT等學校一起承辦的,本來從4月初就開始宣傳,然后定於4月22日進行比賽,後面估計是報名人數不足,準備也不充分,於是推遲到了5月12日。    來説説有意思一些的地方吧哈:第一個是伙食,食堂的正餐其實水平還行(如下圖),每餐一葷一素一鷄蛋,分量大約有些少,不過更嚇人的是第二天早上的早餐居然消失?這叫餓了一晚上的我們如何保證肚子不干擾工作呢,噗...    還有就是平時的小食,想象中的披薩和炸鷄是沒有了,各種袋裝食品倒是挺豐富(如圖),大概能夠每2小時換一波,飲料的話,沒有咖啡?取而代之的是數十箱的王老吉涼茶(圖中只是冰山一角),喝過5、6罐以後已經味同嚼蠟,直言這月不再喝王老吉,然後再次質問爲何沒拉到維他的贊助... ... 不過這個涼茶不是天上掉下來的,坑爹之處,下文再續。    還有就是這件比賽衣服,剛拿到的時候覺得還行,挺透氣也舒服,暗喜又不用買襯衫了。但是在比完賽回去之後,一看,wtf?背面右下角這個紅色logo..

在Debian/Ubuntu服務器上部署kumoRail(Nginx+uwsgi+flask)服務的教程

  kumoRail作爲一個微信公衆號的自動回復服務,需要工作在服務器上面。我們會使用Nginx作爲外部的反向代理服務器,用uwsgi作爲服務器和應用之間的接口,它會自動啓動我們的kumoRail服務器程序。然後使用supervisor來守護和監控uwsgi服務,記錄它的日志,並在發生錯誤的時候進行重啓,保證服務的持續性。最後是安裝和運行MongoDB數據庫。 首先,第一步就是拿到服務器后的更新: sudo apt-get update sudo apt-get upgrade 安裝git: sudo apt-get install git 創建並切換到安放程序的目錄: sudo mkdir /var/www cd /var/www 然後,安裝Python2.7環境(如果你的服務器已經安裝,就可以略過這一步): sudo apt-get install -y python 接著,安裝pip,Python的包管理器: wget https://bootstrap.pypa.io/get-pip.py python get-pip.py 安裝MongoDB數據庫,可以參考MongoDB的網站: https://docs.mongodb.com/tutorials/install-mongodb-on-debian/  ,需要注意的是,目前沒有支持Debian9的版本,需要確保您的Debian版本為7:"Wheezy"或者8:"Jessie",另外,如果您的Debian版本為7:“Wheezy”,需要將第二行命令中的“jessie”替換為“wheezy”。 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.6 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list sudo apt-get update