# Hot Key Document
Mac OS X
## Windows Ctrl+Shift+p 開啟指令列 Tab 自動完成字詞 ctrl + d 選單字 alt + F3 選相同的字 ctrl + f 搜尋 ctrl + 0 focus 到 siderbar Ctrl + Shift + <- or -> Alt + <- or -> 單字 or 符號間移動 Ctrl + Alt + up or down 輸入多選 Ctrl + g 跳行
## Mac OS X Command + shift + p 開啓指令列 Ctrl + Shift + up or down 輸入多選 Ctrl + g 跳行 Command + <- or -> 跳到行首 or 行尾 Ctrl + tab 上一個 focus 的分頁 Ctrl + shift + tab 下一個 focus 的分頁 Command + K + L tolowercase Command + K + U touppercase
...
# Initial Setting Sublime Text 手冊
Preferences->Settings-Default
"default_encoding": "UTF-8" "default_line_ending": "unix" "tab_size": 4 "translate_tabs_to_spaces": true "save_on_focus_lost": true "highlight_line": true "trim_trailing_white_space_on_save": true "rulers": [80, 120] "highlight_modified_tabs": true choose
"ensure_newline_at_eof_on_save": true "use_simple_full_screen": true if want change font size
Preferences->Settings-User
{ "default_encoding": "UTF-8", "default_line_ending": "unix", "tab_size": 4, "translate_tabs_to_spaces": true, "save_on_focus_lost": true, "highlight_line": true, "trim_trailing_white_space_on_save": true, "rulers": [80, 120], "highlight_modified_tabs": true, "font_size": 18.0, "ignored_packages": [ "Vintage" ] }
...
# PHP Note ## Notice 處理 db 的部分放到 model 處理來增強可用性 減少邏輯判斷 以錯誤為優先處裡 ## array to string <?php $arr = array( 'val' => 1, 'str' => 'string', ); $to_string = serialize($arr); echo $to_string; // a:2:{s:3:"val";i:1;s:3:"str";s:6:"string";} $to_array = unserialize($to_string); var_dump($to_array); /* not better * if $to_string can't unserialize, it has PHP error */ ?> ## coding style 在 PHP 中有許多邏輯判斷 當有許多條件要去檢查時, 一般來說就是用 if 一直寫下去 最後就造成下面的情況
if ($a === $b) { if ($c) { if ($c >= 10) { if ($d) { // do something // .
...
# CI AJAX(Post) ## Usage JavaScript(jQuery)
$.post( '/api/post', { val: 'string', val2: 1 }, function(data) { console.log(data); if(data.status === 'ok') { // dosomething } else { // alert fail } }, 'json' ); $.ajax({ url: '/login/signup', type: 'POST', data: { account: $('input[name="account"]').val() }, success: function(data) { console.log(data); } }); PHP
<?php // api.php public function post() { $val = $this->input->post('val'); $val2 = $this->input->post('val2'); if ($val) { // dosomething //response $output = array( 'status' => 'ok', 'msg' => 'success' ); echo json_encode($output); exit; } $output = array( 'status' => 'fail', 'msg' => 'error' ); echo json_encode($output); exit; } ?
...
# MySQL Monitor ## Setting mysql -u root -h <HOST> -P <PORT> <DATABASE_NAME> -p -A ## database 每一個 command 最後都要加 ;
status; create database database_name; drop database database_name; show databases; show tables; use database_name; ## table create table table_name( column1 type1, column2 type2); create table table_name( column1 type1, column2 type2) charset=utf8; desc table_name; show create table <table_name> MySQL 8.0 Reference Manual :: 3.3.2 Creating a Table - MySQL
13.1.20 CREATE TABLE Statement - MySQL :: Developer Zone
...
# 電腦的本質 從計算機發展到現今的電腦,從機械到電子,從簡單到複雜,都脫離不了三個基本性質.
功能分離(function abstraction) 許多不同的階層在獨立運作,而不必顧慮其他階層
通用電腦原理(universal computer) 電腦運作的基本原理都是一樣的,只差在組成的元件不一樣,所以只要程式設計的正確,電腦也能如人腦般的思考
超越工程學 此為全新的電腦設計概念,當電腦的設計變的複雜時,便試圖以全新的概念來設計
...
# 亂數 數位電腦如何產生隨機訊號?項電腦這樣的決定性系統(deterministic system)可以產生一串真正的隨機數列嗎?嚴格說起來,答案是否定的.因為數位電腦所做的每個工作都是由其設計及輸入所決定的,就好像俄羅斯輪盤,球最後所落下的位置是由球的物理性質及輪盤來決定.理論上,若我們了解輪盤的設計及控制其旋轉與擲球力道等詳細[輸入]內容,就應該能預測球的落點.但輪盤停止轉動後的結果看起來卻是隨機的.
電腦也可以用同樣的觀念產生隨機數列,事實上電腦也可以用一種數學模型模擬俄羅斯輪盤的物理性質,每次用稍微不同的角度擲球,已便產生隨機數列.即使丟球的角度只是固定的週期性變化,電腦所模擬的動態轉輪也會將這些些微差異轉化成不可預測的隨機數列.這種隨機數列稱為假隨機(pseudorandom)序列,因為只有不了解其計算方式的觀察者才認為它是隨機的.這種由[假隨機數產生器]所產生的數列可通過所有的標準統計隨機檢測.
數位電腦和真實世界一樣是可預期的,卻也是不可預期的,它們都遵循著決定性的法則,但這些法則會導致相當難以預測的複雜結果.在電腦執行之前猜測它所要做的動作是很不切實際的,而通常不需太大的功夫就可以讓計算變得很複雜.
...
# 位元和邏輯區組 任何可以表示兩種不同訊息的信號就叫二元(binary)信號,或稱為位元.
And Or Invert 函數稱為邏輯區組,把他們依序組合還可以得到其他函數.
EX. Or 輸出端接 Invert,便得到 Nor(輸入端均不為 1 時,輸出便為 1) 兩個 Invert 接在 Or 輸入端,輸出端接上 Invert,便得到 And(兩輸入端為 1,輸出為 1)
早期計算機裝置是由機械元件組成的.17 世紀,巴斯卡(Blaise Pascal)建造了一個機械式加法機,也因此激發了萊布尼茲(Gottfried Wilhelm Leibniz)和英國博學家虎克(Robert Hooke)的靈感而製造了可以乘除甚至開根號的機器.1833 年,英國數學家兼發明家巴比奇(Charles Babbage)設計並建構出可程式化機械電腦的一部分.
...
# 作業系統 指令集複雜度之所以不重要,是因為有副程式.副程式可以讓一串指令在程式中被無限使用.事實上,程式設計師可以用呼叫副程式的方式將原有的指令定義為新的指令.利用 Jump 指令把副程式的位址載入程式計數器中,將執行順序轉移到副程式中,但轉移之前,電腦會將之前程式計數器的內容儲存在特定記憶體中,當副程式執行完時,會有另一個指令讀取到這個返回位址(return address),而讓順序跳回到原先呼叫副程式時的位置繼續執行.
這種呼叫副程式的過程可以遞迴的執行,某個副程式本身可以跳到另一個副程式裡執行,然後這個副程式在跳到別的副程式,依此類推,在遞迴函數中,副程式本身亦可以呼叫自己.為了紀錄這種成層疊加的副程式呼叫過程,電腦必須用一種有系統的方式儲存返回位址,當每個副程式執行完畢時才知道該回到哪裡去.但不能把所有的返回位址都紀錄在同一地方,因為一但副程式成層疊加起來,電腦就必須記住一個以上的返回位址.通常,電腦會將返回位址循序儲存在一群記憶體位置中,稱為堆疊(stack),最後一個返回位址會放在[堆疊頂端(top of the stack)].堆疊記憶體的運作方式就好像疊在一起的盤子一樣,總是從頂端加入或取出東西.這種後進先出(last-in,first-out)的儲存方式,對於儲存一疊疊副程式的返回位址來說確實完美,因為每個副程式都必須等它自己所呼叫的副程式執行完成後才會結束.
電腦中總是裝有一些很有用的副程式,它們統稱為作業系統(operating system).
作業系統包含了能讀寫鍵入字元或是在螢幕上畫線條的副程式,不然就是其他與使用者互動的副程式.作業系統決定使用者所看到的界面,也掌控了電腦與所執行程式之間的界面,這是由於作業系統提供了一套比機械語言指令更豐富且更複雜的指令.
事實上,程式設計師並不在乎他所謂的功能是以電腦硬體或是由作業系統軟體所執行,只要它們能產生同樣的效果就好了.同樣的程式在兩種不同的電腦上運作時,可能其中一個是透過硬體的算術運算執行,而另一個則是以作業系統的副程式來執行.同樣的,電腦的作業系統也會仿效它型電腦的指令集.有時電腦製造商會利用這種模仿方式,讓新型電腦像舊型一樣操作,如此一來就可以不經過任何修改而讓舊有的軟體在新型電腦上運作.
作業系統通常包含執行基本輸入輸出的副程式,也就是能讓程式和外界互動的副程式.其運作方式是將電腦記憶體中某特定位置與鍵盤或滑鼠等輸入設備連接在一起,或是與顯示器之類的輸出設備連接. EX.鍵盤上的空白鍵可能接到記憶暫存器23號,當按下空白鍵時就可以在位址 23 中讀到資料 1,反之讀到資料 0.另一個記憶暫存器可能控制螢幕上的某個點的顏色,假設螢幕上的每一點所顯示的資料都儲存再不同的記憶體位置中,那只要將適當的位元資料寫入記憶體中,電腦就可以在螢幕上畫出任何圖案.
除了這些輸出入機制外,我們所描述的電腦其實只是一部接了記憶體的有限狀態機,而這兩者都可以用暫存器和布林邏輯區組建構出來,控制電腦的有限狀態機相當複雜,設計這樣的機器其實是就是經過一連串記憶體資料,位址和狀態順序等細節,以執行每一個指令,然後再將它的狀態轉換成布林邏輯的過程.既然有限狀態機和記憶體是由暫存器和邏輯區組所組成的,那這些東西就可以用各種技術加以實作, EX.電子電路 液壓管路 滑桿.
...
# 布林邏輯 思維規律的研究(an investigation of the laws of thought)-布耳(George Boole)
布林代數(Boolean algebra)
布林代數很像高中所學的的代數,不同的是方程式中的變數所代表的是邏輯敘述而不是數字.
布林的變數象徵對或錯,
透過 MIT工學院學生夏濃(Claude Shannon)的碩士論文,布林的研究結果得以跨入計算機科學領域,夏濃因發明了資訊理論而負盛名,這個理論定義了資訊的計算單位,位元.
夏濃希望建造一部可以下棋的機器,可以模仿人類思考的機器.1940年他發表了碩士論文,替續開關電路的符號分析(a symbolic analysis of relay switching circuits).
他在論文中說明,建立與布林代數運算式相同意義的電路是可行的.夏濃的電路中,開關的On和Off對應布林代數中邏輯變數的對和錯.
...