http://railser.cn/
最近的一個網站單子裏,需要給客戶用discuz7.2實現一個會員功能,dz是大品牌,何況康盛又被騰訊收購,質量應該可靠。所以反覆衡量,dz成爲首選了。(跟DZ和康盛的系列產品源淵太多了。)
客戶提出的問題還算順利的一一解決,客戶最後提出一個要求,要對最新的消息有一個提示。這個實現很簡單,給客戶講解了如何設定聲音,可是問題來了,我這裏怎麼都聽不到聲音,客戶那裏也是如此。
怎麼會這樣,開始我以爲是我瀏覽器的問題,但是幾個瀏覽器測試都無聲,這個是絕對不應該的。代碼是官網下載的discuz7.2 utf8。什麼情況?怎麼辦?
網上查了一下竟然很多人反饋了這個問題,可是沒有幾個提出解決辦法的,有兩篇的解決辦法嘗試了一下,沒有解決問題。難道是我的特例??
外包方式開發最可怕的是耽誤進度和過多的向客戶解釋,爲客戶選擇的產品,如果質量不過關,影響的絕對就是製作方的信譽。
現在問題來了,如何解決。
解決辦法:
1、先參考官方提供的一個解決辦法,僅做參考,因爲它也沒解決問題。所以我真不知道官方的維護是幹什麼吃的。
http://www.discuz.net/forum.php?mod=viewthread&tid=1523437&page=7#pid12811924
2、因爲mp3,wav等格式均無效,我讓合作的美工把聲音文件轉成了swf,可以在這裏下載。
3、按照上面那篇提示文章,修改一下對應的文件,引用改成swf,並且簡化swf的文件引用,因爲那個player已經無用了,直接引用swf聲音即可。下面是代碼,希望能幫助一些朋友。
templates/default/memcp_profile.htm 499行
$('soundplayerlayer').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_'+file+'.swf', 'menu', 'false', 'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true'); }
templates/default/pm_checknew.htm 可以不改動,因爲在我的方案裏它已經沒用了,如果有嘗試的朋友,可以對應替換這段代碼
<script type="text/javascript" reload="1">$('pmsound').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_$pmsound.swf', 'menu', 'false', 'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true');</script>
兩段代碼的含義是一樣的,都是直接引用swf聲音文件。
templates/default/header.htm 在40行位置,增加
<span id="pmsound"></span> <!--{if $prompt}--><script type="text/javascript" reload="1">$('pmsound').innerHTML = AC_FL_RunContent('id', 'pmsoundplayer', 'name', 'pmsoundplayer', 'width', '0', 'height', '0', 'src', '{$boardurl}images/sound/pm_$pmsound.swf', 'menu', 'false', 'allowScriptAccess', 'sameDomain', 'swLiveConnect', 'true');</script><!--{/if}-->
此段是解決問題的關鍵,注意藍色的部分,論壇代碼裏是缺失這個的,經檢查,pm_checknew裏的執行結果被插入到id="append_parent"的一個 div中,而且,裏面的<!--{if $s}-->是無效的。
4、到後臺更新緩存,重新測試,聲音提示成功。
從發現問題到解決問題經歷了幾天的時間,這裏問題解決不了,終究不能卡住不前的。所以選擇好的產品,使用正確的方法,實在太關鍵。康盛將太多的心思用到了一些花哨的功能上,代碼質量一直未見提高,產品硬傷內傷依舊,一個畫皮一樣的產品,只能靠忽悠來支撐了。
rails new 特定版本
rails _3.0.7_ new railstest
說明:安裝多個版本,尤其安裝了3.1.0 pre 後,使用Rails 3.0.7這個最新穩定版開發項目。
crontab的寫法誤解
crontab的標準寫法參照這裏,http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-autotasks.html
那麼,每閣特定小時運行命令如何寫呢?
每隔30分鐘,運行一次命令,可以寫
*/30 * * * * /sbin/do_something
每隔4小時,可以寫成
* */4 * * * /sbin/do
嗎?不可以,這樣會產生很嚴重的錯誤,導致我每分鐘運行一次命令,直到某種情況下被中止。想到這我真心疼我的mysql和cpu。
這裏正確的寫法應該是
0 0,4,8,12,16,20 * * * /sbin/do (whenever 給出的寫法)
或者
0 */4 * * * /sbin/do (我認爲可行的寫法,不過至今未確認,這個寫法可以從保存時開始,每隔4小時執行一次)
兩個寫法,都要在第一個位置,指定執行開始的分鐘數。
請各位指正,我也繼續驗證一下我的寫法。
readline load error的解決辦法
服務器總算都調試完了,今天打算看一下一個app的具體信息,發現 rails c提示錯誤。
這是個常見的錯誤:`require': no such file to load -- readline (LoadError)
原因:缺少readline
解決辦法:進入rvm ruby1.9.7的src,安裝readline
具體:
>> which ruby
/usr/local/rvm/rubies/ruby-1.9.2-p180/bin/ruby
>> cd /usr/local/rvm/src/ruby-1.9.2-p180/ext/readline
>> ruby extconf.rb
>> make
>> make install
再次rails c,解決問題了。
筆記太有用了,都省去了回憶的時間。
在CentOS5上部署Rails3應用
1、安裝rvm
安裝rvm前,要先安裝git。因爲rvm的安裝教程就是一個git的小腳本。
>>wget http://kernel.org/pub/software/scm/git/git-1.7.5.3.tar.bz2
Oop!這裏有個問題,我tar不常用,這裏tar xvfz git-... 是會提出格式錯誤的,查了一下需要換一個命令:tar -xvjpf git-...
之後,
make prefix=/usr/local all
make prefix=/usr/local install
看到git 版本後,安裝rvm
git --version
剩下的,就是按照 https://rvm.beginrescueend.com/rvm/install/ 的講解一步步安裝吧,最後,阿?爲什麼
type rvm | head -1
會提示錯誤呢?我也被搞糊塗了,按照提示,我重新打開一個終端窗口,這下正常了。所以再看看文檔吧。
接着,安裝1.8.7
2、安裝ruby 1.8.7和gem
rvm install 1.8.7
注:我又將用戶切換回了root,而在進行到Load RVM into your shell sessions as a function的時候,我不得不切換回user。
rvm use 1.8.7
顯示正常了。
安裝gems
http://rubygems.org/pages/download
3、安裝rails
gem install rails -v 3.0.7 --no-rdoc --no-ri
如果安裝rdoc和ri,我出現了問題,具體的情況未明。
問題又來了,>> rails -v 找不到命令
翻看文章的過程中,有一句話很重要,“gem install rails # 注意不要加sudo,否則會安到系統的ruby下,而不是rvm的ruby下”
這是在百度裏查到的,可是不用root,rvm也沒安裝成功,還是我最開始忘記使用user,而在安裝完rvm後,ruby也用了root權限安裝。不知道這裏的影響會有什麼,總之,我犯了一個錯誤,版本搭配錯誤。
應該是 ruby1.9.2搭配rails3.0.7。
好吧,還好有rvm,安裝ruby1.9.2,再 gem install rails,竟然沒有出現第一次時候的 ri 錯誤。欣慰吧。
這裏還有一些細節,不影響整體即可,現在 rails new testrails 成功創建了一個應用。
4、安裝svn
曾經熟悉的svn頁面,已經轉移到 apache 下,地址在這,http://subversion.apache.org/ ,用戶手冊在 http://svnbook.red-bean.com/ 。
按照一些文章介紹,安裝svn實在太複雜了,突然我想起來yum和apt-get。來試一下。
yum install subversion
成功了。
按照這個文檔,我配置過兩次,這裏不再詳述了,又需要的朋友看一下。
我每次都會參照它ignore的操作。
5、ssh配置
在我本地重新生成一個key,其實沒必要的,我只是出於練習的目的。
>> ssh-keygen -t rsa
在服務器上
>> mkdir .ssh (其實沒太大必要了,因爲我的key不打算放到這裏了)
然後傳輸這個key上去
>> scp ~/.ssh/id_rsa.pub loginname@hostdomain:.ssh/authorized_keys
這裏把key命名爲authorized_keys。按照一些教程的說明,綜合起來簡單筆記一下。
在/etc/ssh/<username>建立文件夾,將authorized_keys mv進來,並給予權限
>> chmod 755 <username>
>> chmod 644 <username>/authorized_keys
編輯/etc/ssh/sshd_config,改寫這一行
AuthorizedKeysFile /etc/ssh/%u/authorized_keys
並取消註釋這兩行
RSAAuthentication yes
PubkeyAuthentication yes
保存後,
>> /etc/init.d/sshd restart
啓動另一個終端,登錄時彈出一個窗口提示輸入密碼,其實就是剛纔生成key時候的passphrase。確認後,就不用輸入密碼直接登錄了。
這裏有一個調試經驗。
>> ssh -v name@domain
會輸出交互信息,這裏我發現它先校驗key,如果不通過,就校驗登錄密碼了。所以,如果上面的任何一個步驟有問題,比如權限不對或者寫錯字母,這裏就會繼續提示需要密碼。
如果上面的都正確了,這時就不用再次輸入密碼直接登錄了。
感謝這篇文章,讓我節省了如此多的時間。感謝分享的精神。
接着需要提高一些安全性了,常見的有
PermitRootLogin no (禁止用root登錄,這是默認的,當然有些時候會被其他的開發人員打開,檢查一下是必要的)
StrictModes yes (也是默認的)
PasswordAuthentication no (禁用密碼登錄,加上這個安全性就足夠了,當然還有其他,歡迎各位指點。)
時間過去了一個星期,這期間我在調試一個Rails程序,打算下面部署到服務器上,而不是隨便用個railstest應付了事。這裏又溫習了很多rails得技巧,不過時間好快,一下子就是8天的時間。
好了,我的Rails程序已經基本完成小樣了,開始用capistrano設置。
6、Capistrano
這裏稍微特殊一些的地方,是我用的svn+ssh(注意順序,寫反了不行)鏈接服務器並cap命令。這裏沒有辦法證明一件事情,寫出來供大家參考,就是私鑰設置完,在服務器上也測試一下,比如
svn checkout -q -r5 svn+ssh://domain.com/test/trunk tmp
這裏會要求輸入passphrase,或者添加host到know_host,都可能潛在的影響第一次cap的成功。當然,第一次cap失敗可能是必然的,關鍵是下面分享一下我的deploy.rb給大家參考,減少一些查詢的時間,當然很多東西還得看過說明才瞭解,建議看這篇文章,很有幫助。
下面是我的代碼
(略過)
在配置svn的時候,會有不同的權限設置,比如網站目錄會放到/var/www/中,我覺得這是安全性的問題,超過這個筆記的範圍,就不記述了。不過這其間還是看了一些文章,後面做安全調整的時候會用上的。
補充幾個命令
cap -H 查看幫助
cap -T 查看任務,-vT查看更多任務
cap -e deploy:cold 查看deploy:cold 的說明
7、apapche,nginx和passenger
因爲CentOS上的apache已經安裝好了,所以這裏只要安裝一下passenger就可以了,安裝起來竟然無比簡單,缺少的lib按照提示yum一下就可以了。
8、安裝sqlite3-ruby的問題
google了一下發現很多人安裝這個出現問題,yum install sqlite3-ruby 也不可以,這裏很奇怪,yum竟然找不到這個包。
省去一些步驟,直接 yum search sqlite, 發現給出的包有:
原來是包的名稱不對,所以
yum install sqlite.i386
提示已經安裝
yum install sqlite-devel.i386
安裝成功,再次 gem install sqlite3,提示
sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!
好,可算有了進展。下載 http://www.sqlite.org/download.html 最新版本的sqlite,安裝後,再次 gem install sqlite3,成功了!!
回到rails目錄,再次 bundle install。勝利完成。
9、rake任務出錯,/lib/rake.rb:32: warning: already initialized constant RAKEVERSION
臨時的解決辦法,bundle exec rake RAILS_ENV=production db:migrate
這不是最終解決辦法,還在找,剛纔心急一下給發佈了,其實還沒寫完呢。。
問題發現了,是rake的問題,卸載之後重新安裝rake 0.8.7,問題暫時解決。
10、No such file or directory - /tmp/mysql.sock
CentOS的位置和方法,在此備註,ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
11、invalid packet: sequence number mismatch(3 != 1(expected))
說是ruby-mysql2.9.4的問題,暫時使用2.9.3。但是問題依舊。
gem 'mysql2', '0.2.7' 和gem 'mysql'的區別
最新版本的mysql2,是0.3.2,這是集成進rails3.1的,不適用於rails3.0.7,所以需要指定版本爲0.2.7,環境可以爲Raisl 3.0.x和mysql 5.x
gem 'ruby-mysql'和gem 'mysql-ruby'的區別:都不用了,直接用 gem 'mysql'
“invalid packet: sequence number mismatch”的問題已經解決,去掉ruby-mysql的gem,直接使用 gem 'mysql'
在我的版本環境裏,gem 'mysql2'也不行,我的環境,rvm, ruby1.9.2p180, rails 3.0.7
12、rake 0.9.2和0.8.7,會被同時安裝,也會因爲0.9.2產生問題,建議刪除0.9.2
13、自動執行rake任務
看了一些介紹,其實總結起來是三個事情
(1)參照系統默認的crontab任務,這方面資料很多
(2)rails的好處是gem和實現方案很多,建議使用 whenever 來實現,它會直接提示代碼如何寫,粘貼到當前用戶的crontab裏就可以
(3)具體做法,
>> crontab -e 編輯當前用戶的cron任務
>> */30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'
其實這個文件就這一行就可以,我完整的代碼是
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rvm/gems/ruby-1.9.2-p180@global/bin
MAILTO=root
HOME=/home/liwei
*/30 * * * * /bin/bash -l -c 'cd /home/liwei/wwwroot/appflying.com && RAILS_ENV=production rake autorss:work --silent'
寫在最後:算是大功告成??其實我沒感覺,但是總算把我想寫的內容寫完了。後面還會有一些筆記。這個筆記到此用了2周時間,留念。
hello, rails3.1 pre 第二部分
接着上一篇,問題繼續。
rake db:migrate
>> rake aborted!
>> undefined method `task' for #<Rails31test::Application:0x00000100de6a60>
好吧,繼續找答案,此處還是省略一些細節,直接看這裏吧。
>> bundle exec rake db:migrate
問題暫時解決。
至此,projects已經可以看到了,剩下的還在琢磨。
補充一些鏈接:
CoffeeScript http://jashkenas.github.com/coffee-script/
RVM(Ruby Version Manager) https://rvm.beginrescueend.com/
SASS/SCSS http://sass-lang.com/
Sprockets http://getsprockets.org/
Hello, Rails3.1 pre
Rails3.1面世了,趕緊嚐鮮吧。可是,第一個問題就出現了,更新失敗。此處略過一堆字,直接筆記:安裝rvm吧。
https://rvm.beginrescueend.com/rvm/install/
rvm簡直是多版本ruby開發環境下的救世主。補充一下筆記:
在安裝完rvm後,rails new rails31test 新建了一個測試項目,一切正常,可是bundle的時候出錯,就連 gem list都出錯。查了一下,原來我們要重新安裝gem,也要重新裝rails。
ps:各位是不是會覺得,我剛纔安裝了阿,爲什麼又要裝一次?你是不是也看這個視頻了?http://railscasts.com/episodes/265-rails-3-1-overview
一切都沒錯,只是rvm 1.9.2@railspre --create 是新建了一個gemsets,(此語法爲簡寫)。這樣我們還得安裝一下bundler
rails31test liwei$ gem install bundler
rails31test liwei$ bundle
rails31test liwei$ rails g scaffold project name:string
... ...
/Users/apple/.rvm/gems/ruby-1.9.2-p180/gems/actionpack-3.1.0.beta1/lib/sprockets/railtie.rb:37:in `block (2 levels) in <class:Railtie>': undefined method `context' for #<Sprockets::Environment:0x0000010312c420> (NoMethodError)
查到這個問題的解決辦法:https://github.com/rails/rails/issues/453
在Gemfile裏寫:
gem 'sprockets', '2.0.0.beta.2'
原因:beta.2 is required by rails 3.1.0beta1
注意:安裝的時候,使用的是 gem 'sprockets', '2.0.0.beta.5',所以還要 bundle update sprockets 降回到beta.2
再次
rails31test liwei$ rails g scaffold project name:string
成功
未完待續吧... ...
redmine插件開發心得
上上週經Q友介紹,接了一個redmine插件開發的小項目。我很感興趣的是可以藉此機會把redmine熟悉一下,所以沒太考慮價錢就答應了下來。現在想想,這次開發學到的東西很多,也認識了專業的開發團隊,很值得。下面把redmine插件開發的經驗筆記一下。
先來截圖:
地址:http://www.cocos2d-x.org/projects/cocos2d-x/apps
簡單介紹下
cocos2d-x is a multi-platform, light weight & developer-friendly C++ 2D mobile game engine, open source and released under MIT License. It is a child branch of the famous "cocos2d-iphone" project, and will keep the primary features sync with it.
更多細節請訪問 http://www.cocos2d-x.org/projects/cocos2d-x/wiki
好了,說下這個插件實現的功能。
一是管理髮布平臺,比如iOS,Android,WoPhone,Windows,Other,未來它還會有其他的平臺。
二是在這些平臺分類裏,上傳app,比如時下最火的iOS app,android app等。當上傳iOS app時,可自動採集該信息。
一、讓我們開始
插件如何開發呢?下載其他插件的代碼來研究是關鍵的第一步。因爲之前對redmine插件開發一無所知,所以下面的筆記有點囉唆。
先看一下官方發佈的插件開發文檔,http://www.redmine.org/projects/redmine/wiki/Plugin_Tutorial,請大概的瞭解一下。然後,我們去redmine插件列表,下載兩個很有代表性的插件,redmine_polls和redmine_bookmarks,把它們放到 vendor/plugins 裏。選擇這兩個插件的原因是它們都是自主上傳,填寫內容的。
注意:在最新版本的redmine1.1中,polls會引起個異常。
二、如何管理插件
這是插件管理界面,如果你按照上面插件教程開發的話,你會發現缺少了Configure功能。如何加入這個功能,並且它可以做什麼?可以完全的參考上面兩個插件中的init.rb 和games插件裏的寫法。
settings :default => {},
:partial => 'platforms/manage'
這兩行代碼的作用,使得我們可以編輯一個頁面,這個頁面裏,實現了games的platform管理。當然,你也可以在configure裏增加apps的管理,豐富管理員功能。
這裏要注意的是,權限如何分配了。
三、如何分配權限
按照文檔的描述,我們可以很妥善的分配各個角色的權限。public => true,即可將所指定的action開放給所有人,如果想屏蔽掉未登錄的賬號訪問,:require => :loggedin 即可。如果想對登錄賬號做區別,就需要針對每個action做以分別了。
權限設置的文檔不夠全,建議大家多參考別人的代碼,和看源代碼分析一些用法。
四、設置導航菜單
在插件的init.rb文件裏,需要單獨寫一遍插件所使用的路由規則,爲了是插件地址更沒關,我們的做一些代碼上的犧牲。
ActionController::Routing::Routes.draw do |map|
map.connect 'projects/:project_id/apps', :controller => "apps", :action => "index"
map.connect 'projects/:project_id/apps/all', :controller => "apps", :action => "all"
map.connect 'projects/:project_id/apps/:id', :controller => "apps", :action => "show"
map.resources :apps,
:member => {:recommend => :post, :delete_pic => :post, :snatching => :get, :doing => :post},
:collection => {:all => :get}
end
這是games裏的設置,只是將三個方法做了前綴處理,這樣可以和其他導航鏈接類似,都是 /projects/text_proj/apps/9 的形式。否則,按照resource的形式,將會是很難看(客戶也不會接受的)/apps/9?project_id=text_proj
五、開發插件代碼
這是我們最熟悉的部分了,此處省略一萬字節。
六、使用js和css
這個地方有點麻煩,每次改動都得重啓一下服務,因爲每次重啓纔會將js代碼和css文件同步到public下,當然我們可以在public下去寫,收工前拿回到插件目錄下,可是插件用的文件都不大,何況我都是production下開發,改哪個代碼都得重啓。(development下的執行速度你們是知道的)。
七、抓取app store
games插件有一個很重要的功能,就是到app store頁面去採集app信息。代碼在lib下的app_snatcher.rb,功能比較簡單,僅做參考吧。
八、其他插件和gem
出於嘗試的目的,我使用了will_paginate插件來實現分頁,paperclip來保存app採集時候的icon和screenshot,在採集時使用了兩個gem,請編輯你的environment.rb,增加
config.gem 'hpricot'
config.gem 'mechanize'
九、總結
如果你覺得這個代碼對你開發redmine插件又幫助,可以在這裏下載它:https://github.com/liwei78/redmine-games 。
歡迎和各位交個朋友,我個人的博客:http://liwei.me,目前正在設計新的界面,會把我的介紹,包括工作內容,都整理髮布到上面。
十:廣告一下
前者關注電子商務動態和IT業內新聞,後者爲京東商城點評,購物推介點評。
Update at 2011-6-15
升級了一下,0.0.1到0.0.2,增加了lightbox顯示screenshots
errors.add_to_base和errors.add
我們在頁面上進行ajax校驗屬性的時候,有兩種情況會碰到。
一種是,只要出錯,就給一個提示。這個比較常見的就是“您填寫的用戶名或密碼不正確”。因爲這裏可能做了三組判斷,先判斷用戶名是否存在,然後是密碼是否爲空,三是兩者能否檢索出一條紀錄。如果那個出現爲空,就直接返回false,controller也就直接宣佈了上面那句話。
第二種比較複雜,就是每個屬性都會給一個詳細的解釋,甚至多個解釋,比如郵件格式不正確,郵件不能爲空,郵件應該以字母開頭等等。因爲ajax判斷有時候不一定會把model實例傳回來,而可能只給一個message,讓view去針對該輸入進行提示,比如那個經典的輸入礦失去焦點時校驗。
針對上面兩種方法,我經常用到的就是 errors.add_to_base 和 errors.add 方法。這裏做以筆記。內容來自rdoc
def validate!
errors.add(:name, "can not be nil") if name == nil
end
def validate!
errors.add_to_base("can not be nil") if name == nil
end
其實,它們是一樣的
def add_to_base(msg)
add(:base, msg)
end
做以筆記,因爲有時候真的會忘記這些小代碼。
補充幾個方法:
def Person.human_attribute_name(attr, options = {})
attr
end
它可以把名稱更人性化的輸出,比如“first_name” 輸出爲 "First name"。但是它是一個過時的方法,我們會得到一個提示:"ActiveRecord::Errors#generate_message has been deprecated. Please use ActiveRecord::Error.new().to_s."
company = Company.create(:address => '123 First St.')
company.errors.on(:name) # => ["is too short (minimum is 5 characters)", "can't be blank"]
company.errors.on(:email) # => "can't be blank"
company.errors.on(:address) # => nil
顯而易見
def on_base
on(:base)
end
對上面方法的一個補充。
我喜歡netbeans的一個很重要原因就是查看這些代碼的doc很方便,有時候一個簡單的方法附近的doc就能讀上和體會一陣子。呵呵。
其他實用的方法歡迎各位補充。
2011,讓APP飛一會吧
2011,我有個驚奇的開始,我的iTouch有一天突然可以上網了,原因不明。緊接着幾天,接觸了一個開發項目,是做一個APP介紹的網站。可以用Rails。這一點實在讓我暗地裏歡喜:可算有得發揮了。接着,《讓子彈飛》上映,那就讓APP也跟着飛一會吧。
經過一個多月的敲敲打打,www.myappblog.net 正式上線了,這裏把以往Rails2.x用過的技術,在Rails3.0平臺上又加強了一遍,認真體會了一下Rails 3帶來的變革。
MyAPPBlog網站是一個iPhone,iPad應用推薦,點評的網站,上面還增加了很多視頻,講解遊戲的玩法,看得我實在興奮阿。對於不經常逛app store的我來說,沒事看看MyAppBlog的資訊,能發現太多不知道的事情。MyAPPBlog就像一本App雜誌,很方便,而且,它是我的又一個五星級的程序作品。(哈哈)
從MyAPPBlog的網站定位上,可以看到它的特點:一是信息分享,比如最新的資訊,免費的app,二是APP操作視頻,強烈建議把怒鳥的攻略發佈一下,因爲某人。。。。
說說程序,MyAPPBlog用了haml和sass,這極大的提高了頁面的可維護性。這不是一點點的改變,而是把頁面結構,設定的更加規範,比如div class的設計
.title
= @app.title
這樣就實現了一個div層的結構。sass我目前用到它三個特性,變量,命名空間和繼承。
Rails3讓MyAPPBlog的維護更加方便,尤其是之前很難受的fckeditor的附件處理,Rails3上可用的ckeditor gem,直接用了paperclip,圖片文件上傳省了很多代碼。
後面的工作集中在app store的數據分析上,任務挑戰很大,但應用前景非常看好。
這裏稍微提一下,個人對工作的定義也有了一些改進,目前的工作應該叫技術支持。
大多數人理解的外包是拿錢走人的形式,所以,技術支持,就是一個長期的服務狀態,在Rails的領域裏進行不斷的積累,將自身的成果分享給每一個客戶。
寫在最後:
夜深人靜,32歲的人,已經沒有了當年創業時候的衝動,也沒有開發搜索引擎時候的韌勁。事情按部就班的繼續,看着一羣比自己小10歲的年輕人,他們是不是也在經歷我過去10年所做過的事情呢?我現在做的,未來做的,是不是他們10年後也要來做的呢?