Shang-Zhe Yu's BLOG

Install robotframework/robotframework-ride on windows 64bit

| Comments

@echo off
call :check_Permissions
pushd %temp%
 
@echo.===================================================================
@echo.install python-2.7.6.amd64
call :download "http://www.python.org/ftp/python/2.7.6/python-2.7.6.amd64.msi" "python-2.7.6.amd64.msi"
python-2.7.6.amd64.msi /passive
call :download "http://www.rapidee.com/download/RapidEE_setup.exe" "RapidEE_setup.exe"
RapidEE_setup.exe /SILENT
"%programfiles%\Rapid Environment Editor\RapidEE.exe" -a -c Path "C:\Python27;C:\Python27\scripts"
 
@echo.===================================================================
@echo.install setuptools
call :download "http://python-patch.googlecode.com/svn/trunk/patch.py" "patch.py"
call :create_patch
python patch.py -d C:\Python27 python27_patch.diff
call :download "https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py" "ez_setup.py"
python ez_setup.py
 
@echo.===================================================================
@echo.install pip
call :download "https://raw.github.com/pypa/pip/master/contrib/get-pip.py" "get-pip.py"
python get-pip.py
 
@echo.===================================================================
@echo.install wxPython2.8-win64-unicode-2.8.12.1-py27
call :download "http://downloads.sourceforge.net/project/wxpython/wxPython/2.8.12.1/wxPython2.8-win64-unicode-2.8.12.1-py27.exe" "wxPython2.8-win64-unicode-2.8.12.1-py27.exe"
wxPython2.8-win64-unicode-2.8.12.1-py27.exe 
 
@echo.===================================================================
@echo.install robotframework
pip install --upgrade robotframework
 
@echo.===================================================================
@echo.install robotframework-ride
call :download "https://robotframework-ride.googlecode.com/files/robotframework-ride-1.2.3.win-amd64.exe" "robotframework-ride-1.2.3.win-amd64.exe"
robotframework-ride-1.2.3.win-amd64.exe
pip install --upgrade robotframework-ride --allow-external robotframework-ride --allow-unverified robotframework-ride
 
 
pause
@goto :EOF
 
:download 
@"C:\Windows\System32\WindowsPowerShell\v1.0\powershell" "$wc = New-Object System.Net.WebClient;$wc.DownloadFile('%1', '%2')"
@echo %2
@goto :EOF
 
:create_patch
@> python27_patch.diff (
@echo.Index: Lib/mimetypes.py
@echo.===================================================================
@echo.--- Lib/mimetypes.py (revision 85786^)
@echo.+++ Lib/mimetypes.py (working copy^)
@echo.@@ -27,6 +27,7 @@
@echo. import sys
@echo. import posixpath
@echo. import urllib
@echo.+from itertools import count
@echo. try:
@echo.     import _winreg
@echo. except ImportError:
@echo.@@ -239,19 +240,11 @@
@echo.             return
@echo. 
@echo.         def enum_types(mimedb^):
@echo.-            i = 0
@echo.-            while True:
@echo.+            for i in count(^):
@echo.                 try:
@echo.-                    ctype = _winreg.EnumKey(mimedb, i^)
@echo.+                    yield _winreg.EnumKey(mimedb, i^)
@echo.                 except EnvironmentError:
@echo.                     break
@echo.-                try:
@echo.-                    ctype = ctype.encode(default_encoding^) # omit in 3.x!
@echo.-                except UnicodeEncodeError:
@echo.-                    pass
@echo.-                else:
@echo.-                    yield ctype
@echo.-                i += 1
@echo. 
@echo.         default_encoding = sys.getdefaultencoding(^)
@echo.         with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, ''^) as hkcr:
)
@goto :EOF
 
 
 
:check_Permissions
    echo Administrative permissions required. Detecting permissions...
 
    net session >nul 2>&1
    if %errorLevel% == 0 (
        echo Success: Administrative permissions confirmed.
        @goto :EOF
    ) else (
        echo Failure: Current permissions inadequate.
        pause >nul
        exit
    )

Grandma's glasses

| Comments

See through grandma's glasses, become Omniscient in The Cookieverse

Full Source on Github

Features

  • Multiple timer for items.
  • Highlight best item/upgrade
      Max 3 buying steps optimization.

  • Calculating with Actual Data
      It calls a clone of in-game function Game.CalculateGains to calculate total cps. Effects from other products' amount and upgrades are included naturally.

  • Update Survivor
      Calculation keeps correct after each game-update, as the function name keep in the same.
      No need to wait me update script.

ChangeLog

  • What's next :
    • Timer for upgrades.
  • 9/30
    • v.1.036.13
      • improve: low frequency timer when waiting time is over 1 hour
      • improve: better way to check for highlight updating.
      • fix: avoided concurrent execution of hl.highlight
      • fix: timer text is mouse pass-through now
  • 9/21
    • v.1.036.12
      • New: Algorithm for best item is changed to Best bestGainedCps per second in payback time
      • improve: timer string limits to 2 field (e.g. "1d 10h" or "1h 5m")
      • improve: smarter highlight updating
      • improve: smarter timer updating
    • v.1.036.11 Multiple level optimize and green colors in different level
  • 9/20
    • v.1.036.10 Fix single highlight error
    • v.1.036.09 Choose available items for first buying
    • v.1.036.08 Add highlight for upgrades(include upgrade CP calc in level-1 optimize)
  • 9/19
    • v.1.036.07 Reduce timer's cpu usage
  • 9/18
    • v.1.036.06 Same color for level-1 and level-2 optimal item since page updates after each bought
    • v.1.036.05 Fix: auto mark Building every second
    • v.1.036.04 Faster timer(250ms) when click big cookie; only light 1 assist item
    • v.1.036.03 Fix multi level highlight
  • 9/15
    • v.1.036.02 Fix: Version is block by googleAds
    • v.1.036 9/15 Maximum 3 level highlights, as accurate as Cookie Monster

How to use Grandma's glasses?

  1. Drag Grandma's glasses to bookmark toolbar, or use following code to create a bookmarklet.

    Bookmarklet source
    javascript:(function a(e){if(e.length){var g=document.createElement("script");g.type="text/javascript";if(g.readyState){g.onreadystatechange=function(){if(g.readyState=="loaded"||g.readyState=="complete"){g.onreadystatechange=null;a(e.slice(1))}}}else{g.onload=function(){a(e.slice(1))}}e[0]+=(e[0].indexOf('?')===-1)?"?":"&";e[0]+="ts="+new Date().getTime();g.src=e[0];document.getElementsByTagName("head")[0].appendChild(g)}}([
    "//rawgithub.com/jcppkkk/Cookie-Clicker-Highlighter/master/cookie-highlighter.js"
    ]))
    
  2. Click the bookmarklet on Cookie-Clicker page.

  3. Done!

What do these colors mean?

Green product

  • Countdown timers shows how long you can buy the products if your cookies is not enough for them.
  • Light Green means the best item which has maximum Which means, (1) For affordable items, it is Fastest way to regain consumed cookies to get ready for next buying. (2) For starting from 0 cookies, it is actually calculating
  • Dark Green items is not the best one, but buying it can help you buy the Light Green item faster.

Calculates

  • Grandma's glasses picks the best item as buying target. the comparison is based on
  • To buy the target item faster, Grandma's glasses
    1. list all combination of 1~3 buying steps. For example, if we have items from 1 to 10, and item 9 has max Income Per Cost. We want to know if buying some other items can speed up the waiting time to buy item 9. Grandma's glasses will list all possible buying steps as following:
      [9]       Just wait and buy item 9
      [1, 9]    Wait(if don't have enough cookies), buy item 1, wait, buy item 9
      [2, 9]
      ...
      [8, 9]
      [9, 9]    *Skipped. We don't buy something first in order to buy itself again
      [10, 9]
      [1, 1, 9]
      ...
      [10, 10, 9]
      
    2. Calculates each buying chain's waiting time.
    3. Choose the combination with least waiting time.
    4. Highlighted the target item Yellow and item in first step Green.

Install Nginx with Passenger, ngx_pagespeed and spdy on Ubuntu 12.04

| Comments

Install dependencies:


Install Passenger:

Following Steps in https://github.com/pagespeed/ngx_pagespeed
Stop at step of configuring nginx

Build nginx with passenger, ngx_pagespeed, spdy:


$ passenger-install-nginx-module

Options during passenger-install-nginx-module:

  1. 2. No: I want to customize my Nginx installation. (for advanced users)
  2. Please specify the directory: /home/jethro/nginx-1.4.2
  3. Please specify a prefix directory [/opt/nginx]: <ENTER>
  4. Extra arguments to pass to configure script: --with-http_spdy_module --add-module=/home/jethro/ngx_pagespeed-release-1.6.29.5-beta
  5. Is this what you want? (yes/no) [default=yes]: <ENTER>
  6. Passenger settings will be printed at the end:
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.14;
    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby;
    

Config nginx, Passenger, ngx_pagespeed and spdy:


[spdy]

Create a self-signed certificate
www.weithenn.org/cgi-bin/wiki.pl?SSL_Certificate-自行產生_SSL_憑證

$ cd /opt/nginx/conf;
$ openssl genrsa -des3 -out server.key 2048
$ openssl req -new -key server.key -out server.csr
$ openssl x509 -req -days 7305 -in server.csr -signkey server.key -out server.crt

[ngx_pagespeed]

Make cache folder

$ sudo mkdir /var/ngx_pagespeed_cache
$ sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

[nginx]

Install nginx init script for Ubuntu:

$ sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
$ sudo sed -i "s#/usr/local/nginx#/opt/nginx#" /etc/init.d/nginx
$ sudo chmod +x /etc/init.d/nginx
$ sudo service nginx status  # to poll for current status
$ sudo service nginx stop    # to stop any servers if any
$ sudo service nginx start   # to start the server
#[optional] 
$ sudo update-rc.d -f nginx defaults
/opt/nginx/conf/nginx.conf
# Replace `user` setting near line 2 to start nginx as specified user.
user  www-data; 

# Add following config into `http` section
    # passenger setting
    passenger_root /usr/local/rvm/gems/ruby-2.0.0-p195/gems/passenger-4.0.14;
    passenger_ruby /usr/local/rvm/wrappers/ruby-2.0.0-p195/ruby;
    
    server {
        listen       80;
        server_name  redmine;
        root /opt/redmine-2.3/public;
        
        # spdy setting
        listen 443 ssl spdy;
        ssl_certificate server.crt;
        ssl_certificate_key server.key;
        
        # passenger setting
        passenger_enabled on;
        client_max_body_size      40m; # Max attachemnt size
        
        # pagespeed setting
        pagespeed on;
        ## Needs to exist and be writable by nginx.
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
        ##  Ensure requests for pagespeed optimized resources go to the pagespeed
        ##  handler and no extraneous headers get set.
        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
        location ~ "^/ngx_pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon$" { }
        location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
        location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
        location /pagespeed_console { allow 127.0.0.1; deny all; }
    }

To confirm that the module is loaded, fetch a page and check that you see the X-Page-Speed header:

$ sudo service nginx start
 * Starting Nginx Server...        [ OK ]
$ curl -s -I 'http://localhost:80/' | grep X-Page-Speed
X-Page-Speed: 1.6.29.5-....

軍事審判法修正案三讀

| Comments

軍事審判法修正案三讀

【聯合晚報╱記者陳志平/即時報導】

2013.08.06 12:36 pm

軍事審判法今天三讀,上午朝野協商結論決議,軍人犯罪將區分為平時、戰時,現役軍人戰時犯陸海空軍刑法或其特別法之罪,依軍審法追訴、處罰;現役軍人非戰時犯陸海空軍刑法第44條到第46條,第76條等,或其特別法之罪,則依刑事訴訟法追溯。非現役軍人不受軍事審判。

此外,本法通過後,偵查、審判程序尚未終結者,偵查中案件移送該管檢察官偵查,審辦中案件移送該管法院審判。並自公布日施行。對於裁判確定的案件,不得向該管法院上訴或抗告,但若有再審或非常上訴者,得依刑事訴訟法聲請再審或非常上訴,此條文則自公布後5個月施行。

相關法條節錄如下:

第44條(凌虐部屬罪)

  長官凌虐部屬者,處三年以上十年以下有期徒刑。致人於死者,處無期徒刑或七年以上有期徒刑;致重傷者,處五年以上十二年以下有期徒刑。
  上官或資深士兵藉勢或藉端凌虐軍人者,處五年以下有期徒刑。致人於死者,處無期徒刑或七年以上有期徒刑;致重傷者,處三年以上十年以下有期徒刑。
  長官明知軍人犯前二項之罪,而包庇、縱容或不為舉發者,處三年以下有期徒刑、拘役或新臺幣三十萬元以下罰金。

第45條(不應懲罰而懲罰罪)

  長官對於部屬明知依法不應懲罰而懲罰者,處三年以下有期徒刑、拘役或新臺幣三十萬元以下罰金。
  對部屬施以法定種類、限度以外之懲罰者,處一年以下有期徒刑、拘役或新臺幣十萬元以下罰金。

第46條(阻撓部屬陳情罪)

  長官以強暴、脅迫、恐嚇、利誘或其他不正方法阻撓部屬請願、訴願、訴訟、陳情或申訴者,處三年以下有期徒刑、拘役或新臺幣三十萬元以下罰金。
  有審查或轉呈之職責而犯前項之罪者,亦同。

第76條(戰時從重處罰)

  現役軍人犯刑法下列之罪者,除本法另有規定外,依各該規定處罰:
  一、外患罪章第一百零九條至第一百十二條之罪。
  二、瀆職罪章。
  三、故意犯公共危險罪章第一百七十三條至第一百七十七條、第一百八十五條之一、第一百八十五條之二、第一百八十五條之四、第一百九十條之一或第一百九十一條之一之罪。
  四、偽造文書印文罪章關於公文書、公印文之罪。
  五、殺人罪章。
  六、傷害罪章第二百七十七條第二項、第二百七十八條第二項之罪。
  七、妨害性自主罪章。
  八、在營區、艦艇或其他軍事處所、建築物所犯之竊盜罪。
  九、搶奪強盜及海盜罪章。
  十、恐嚇及擄人勒贖罪章。
  前項各罪,特別法另有規定者,從其規定。
  戰時犯前二項之罪者,得加重其刑至二分之一。

Reference:

魚缸建立硝化系統全過程

| Comments

整理自 柴富的 魚缸建立硝化系統全過程

1989年俄國微生物學家-維諾格雷斯基.無意發現一類所謂的好氧菌.它們生活方式與一般細菌不同.一般細菌需靠利用有機物.而這類細菌不能以有機培養.赤能在通氣狀況下.利用無機培養.

  • 硝化菌廣佈於土壤.淡海水和污水處理系統中.
  • 硝化菌的歸納為兩類:1.亞硝酸菌 2.硝酸鹽菌.
  • 硝化菌的基本形態:桿狀、球狀、螺旋狀等.
  • 硝化菌需要的無機碳源:碳酸、碳酸鹽等.
  • 硝化菌需要的營養元素:蛋白質、脂肪、酵素、維生素等
  • 硝化菌需要的無機化學能:氨源或亞硝酸鹽.
  • 硝化菌需要的氧氣:以每公斤的氨氮核計,至少要4.5公斤的氧,最好不低於2PPM
  • 硝化菌最適合的PH值:7.5~8.2之間
  • 硝化菌最適合的溫度:不超過30度不低於20度.
  • 硝化菌的運動:有鞭毛振動的菌體[可移動],不具鞭毛的菌種[隨水流飄移].
  • 硝化菌最適合的水流:硝化菌會分泌出一種黏性強的脂多糖類的化學物質,可把自己黏著在一起,組成凝菌膠團,便經的起水流沖刷.
  • 硝化菌與光:生態上的硝化菌均有避光現象.

硝化系統的建立


大家把新買的魚缸興沖沖的裝備齊全, 加了水, 激活馬達, 都會問, 下一步怎麼辦? 「買魚」 相信這是最快閃入大腦的答案.然而一個星期過後, 魚一隻隻的回老家了, 才覺得不對, 哪做錯了…… 答案往往是, 硝化系統沒有建立完全.

硝化系統意指培養硝化菌把魚魚所排出來的毒素排除掉.

整個系統的大綱是: 魚的廢物 (氨) -> 亞硝酸鹽 -> 硝酸鹽

(以下數據僅供參考, 因為太多的因素會使每個魚缸都不大一樣)

初期 (氨的累積)

魚下缸, 開始排放廢物, 氨 (阿摩尼亞) 開始累積, 阿摩尼亞對魚是超級有害的.通常在下魚的三天後氨的濃度開始上揚.

建議控制 氨 濃度:

  • 0.25-1.0 ppm: 25% 換水,餵食減半.
  • 1.0-2.0 ppm: 50% 換水, 減少餵食,
  • >2.0 ppm: 繼續換水, 直到< 1.0ppm,不要餵食.(因為系統付荷過重)
  • 這期間如果感覺魚快不行了,繼續換水, 直到< 1.0ppm,不要餵食.

中期 (亞硝酸鹽的累積)

亞硝酸菌 開始分解氨, 將它轉成亞硝酸鹽. 然而這也是對魚有害的. 有些魚在亞硝酸鹽 = 1ppm 就受不了了. 亞硝酸鹽濃度通常在一個星期後開使上揚.

建議控制 亞硝酸鹽 濃度:

  • 0.1-0.5ppm: 25%換水,餵食減半.
  • 0.5-1.0 ppm:50% 換水,減少餵食
  • >1.0 ppm: 繼續換水,直到 < 1.0 ppm,不要餵食.(因為系統付荷過重了)
  • 這期間如果感覺魚快不行了 繼續換水,直到 < 1.0 ppm,不要餵食.

後期 (硝酸鹽的累積)

再過一個星期後, 硝酸鹽菌開始長成. 硝酸鹽菌成長的比較慢. 差不多15小時才長一倍. 硝酸鹽菌 會將 亞硝酸鹽分解成 硝酸鹽. 少量的硝酸鹽是魚兒能接受的.且水草也能吸收. 不過濃度太高魚也會回老家的. 要靠定期的換水來稀釋硝酸鹽的濃度. 硝酸鹽的濃度也最好不要超過 20ppm.

建議控制 硝酸鹽 的濃度,保持在 < 5ppm

硝化系統建立實例


系統的建立只有一個秘訣:時間。因為所需的硝化菌就存在你我的身邊. 大家所需要給的只是一點時間, 跟一點幫助.

Q: 新買的魚缸如果只有兩三隻魚, 空空的能看嗎?
A: 我知道, 不過相信我, 慢慢來, 魚會感謝你的.

Day 1~7

買兩三隻比較粗養的魚, 餵少量的飼料. 第二天起開始測量阿摩尼亞的濃度.濃度會持續升高好幾天, 不要怕.

Day 7~14

大約在一個星期左右, 因為 硝化菌的長成, 開始進入中期. 阿摩尼亞的濃度會快速減退. 在這期間, 如果魚真的不大行了, 可少量換水來稀釋缸中的水.相對的,亞硝酸鹽的濃度開始爬升. 一個星期後, 和阿摩尼亞測試同步, 開始測試亞硝酸鹽濃度. 每兩天量一次, 亞硝酸鹽會到頂然後慢慢的撿退

在第一個星期中, 可加入商品硝化菌, 這樣也有幫助.幸運的話,可縮短一個星期的時間. 養魚的頭一個月是關鍵期. 是老天給我們的測試. 看我們是真的想養魚還是玩玩而已.

Day 17

開始進入後期階段. 再過一個星期, 當亞硝酸鹽和阿摩尼亞濃度都降為零時, 硝酸鹽的濃度開始增加.這時, 恭喜大大. 系統建立完成. 先別急著追加魚. 先換少量的水. 再等兩天. 再加魚.一次也不要加超過三隻. 不然一下子加太多, 系統會崩盤. 前三個星期所做的努力就付諸東水了.

硝化菌生長期


依生長速率來區分硝化細菌約可分為五個生長期:

1. 遲緩期

當硝化菌剛接觸生活物質時,生長系用以適應新環境而不增加硝化細菌數的時期。此時期的長短,視新環境對硝化細菌之影響程度而定。

2. 對數生長期

硝化細菌適應新環境後,迅速氧化氨或亞硝酸鹽以獲得能源固定無機碳的時期,於是有機合成反應加速,數目激增,是為對數生長期,蓋生長情形系成級數增加。在此階段中,繁殖速率達最大值。

3. 遞減生長期

當氨或亞硝酸鹽濃度逐漸減少,硝化細菌增加到某一點時,剩餘之生長資源將限制硝化細菌的生長速率,使硝化細菌的增加數量,變成十分緩慢的時期。

4. 靜止期

硝化細菌在環境中的生長受到限制因子的影響(如氨源不足)已達飽和,此時生長速率等於死已速率,硝化細菌的數量達到穩定的狀態。因靜止期相當短暫,故也有人把這時期的區分從略。

5. 內呼吸期

又稱內生期。系統內氨或亞硝酸鹽已耗盡,硝化細菌呈「飢餓」狀態,只能利用體內養分繼續進行代謝作用,死亡速率大增,數量大為減少的時期。

硝化菌生長環境


硝化細菌在一般環境中也有老化及死亡的問題,老化及死亡是有機生命體必須共同面對的問題。硝化菌的生境條件: 凡是環境之物理、化學及生物等性均會影響硝化細菌之生長,因此硝化細菌的生境條件可被區分為物理因子、化學因子及生物因子三類。其中物理因子主要為溫度、光照、底質、水流等:化學因子主要是鹽度、溶氧、ph質、抑制劑等:生物因子主要為掠食者、競爭排除作用等。

1. 溫度

硝化菌合適體溫約20~28度c,最適生長及繁殖溫度約25度c。一般硝化菌在溫度低於5度c及高於42度c就停止代謝作用,超過此一範圍一般硝化菌很難存活。

2. 光

硝化菌不像綠色植物及某些自營性光合細菌一般具有光合色素,因此不能利用日光進行光合作用合成有機物。不僅無法利用日光,反而
會害怕日光照射。

3. 底質

硝化菌非常需要底質,但不同的是它的目的不在於覓食,而是底質可以提供附著、掩蔽和獲得其所需要的氨源及營養源。許多硝化菌沒有找到適當底質前不能進行繁殖,以及不能利氨源與營養源。

4. 水流

由於硝化菌的固著生活特徵,必須靠水流輸送它所需要的氧氣、氨及營養物質等生存資源。

5. 溶氧

溶氧為硝化菌不可或缺的生活要素。建議是不要低於2ppm。

6. ph值

一般而言,絕大多數硝化細菌比較喜歡生長在弱鹼性的環中,其ph值約7.5~8.2。ph值會影響硝化細菌生長與繁殖。亞硝酸菌ph範圍7.0~8.0,最佳平均是7.8。硝酸菌範圍約6.5~8.5。

7. 競爭排除作用

指硝化菌的生活空間遭到其它異營性細菌的排擠壓力,導致硝化菌族群無法持續發展,乃至有逐漸萎縮趨勢。有機物污染不但會影響硝化細菌生長,也會引來異營性細菌,逼使它們不得不撤離家園,重覓他處尋求發展。

硝化菌的間接確定方法


取樣菌在完全無機的含氨營養試液作除氨效率及速度的測試,若樣菌有明顯的除氨效率及速度,即暗示它可能是硝化細菌,理由是在幾乎完全無機環境中,以及又有豐富的氨源之情況下,似乎只有硝化細菌能適其中,並發揮除氨功能。

硝化細菌的作用絕對不是單純的淨水,他是一個水族生態的關鍵。剛建立的新缸並不存在這些有益的細菌。當你把買來的硝化菌倒在生化環上的時候,細菌開始在裡面繁殖,這是一種有益菌,通過他建立一種生物過濾系統,以自然分解水中的底質和有害物質。當然這需要一段的時間,讓這些細菌繁殖,直到他足以處理魚兒的排泄物。

而這些細菌的繁殖速度,草缸要比裸缸相對快的多。裸缸必須有良好的物理過濾,然後通過硝化細菌在濾材中的繁殖,再起到生物過濾的效果。一旦生物過濾建立好了,才真正開始了你的氮循環。這樣一個氮循環的過程有時需要幾週,甚至更長的時間

你們可能有這樣一種相同的經歷

第1天,放入闖缸魚,此時氨和亞硝酸鹽濃度為0,水是非常清澈的,像水晶般

第3天,水開始發白,氨的濃度馬上升到一個危險水平,硝化細菌開始繁殖生長,魚只開始窘迫,拒食

第5天氨的濃度達到高峰,硝化細菌開始把氨轉換為亞硝酸鹽,魚出現明顯不適,有些魚可能在這一時間死去

第8天,氨被轉換為了亞硝酸鹽,亞硝酸鹽濃度上升,魚的狀態開始好轉

到了第14天,亞硝酸鹽的濃度又開始上升到高峰,,魚再次陷入窘迫,某些強壯的魚,可以挺過這一時期

第20天左右,亞硝酸鹽開始下降,氮循環第2階段開始,魚只狀態好轉,水質也開始穩定

第25天亞硝酸鹽被轉換成硝酸鹽。亞硝酸鹽的濃度迅速降低。

第30天,氨 和亞硝酸鹽已經檢測不出,水族箱完成了氮循環,你可以換掉一部分水,然後放入你想要的魚了。

還有你的過濾系統,濾材可以換成:過濾棉/生化球/石英環/活性炭/過濾棉/菜瓜布。甚至濾材還可以再簡單點:過濾棉/生化棉/石英環,就可以了。