Skip to main content

Tedshd's Dev note

Sublime Text - initial setting

# 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

# 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 // . ...

Codeigniter - AJAX(post)

# 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 command

# 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 ...

Computer Science

# 電腦的本質 從計算機發展到現今的電腦,從機械到電子,從簡單到複雜,都脫離不了三個基本性質. 功能分離(function abstraction) 許多不同的階層在獨立運作,而不必顧慮其他階層 通用電腦原理(universal computer) 電腦運作的基本原理都是一樣的,只差在組成的元件不一樣,所以只要程式設計的正確,電腦也能如人腦般的思考 超越工程學 此為全新的電腦設計概念,當電腦的設計變的複雜時,便試圖以全新的概念來設計 ...

Computer Science - 亂數

# 亂數 數位電腦如何產生隨機訊號?項電腦這樣的決定性系統(deterministic system)可以產生一串真正的隨機數列嗎?嚴格說起來,答案是否定的.因為數位電腦所做的每個工作都是由其設計及輸入所決定的,就好像俄羅斯輪盤,球最後所落下的位置是由球的物理性質及輪盤來決定.理論上,若我們了解輪盤的設計及控制其旋轉與擲球力道等詳細[輸入]內容,就應該能預測球的落點.但輪盤停止轉動後的結果看起來卻是隨機的. 電腦也可以用同樣的觀念產生隨機數列,事實上電腦也可以用一種數學模型模擬俄羅斯輪盤的物理性質,每次用稍微不同的角度擲球,已便產生隨機數列.即使丟球的角度只是固定的週期性變化,電腦所模擬的動態轉輪也會將這些些微差異轉化成不可預測的隨機數列.這種隨機數列稱為假隨機(pseudorandom)序列,因為只有不了解其計算方式的觀察者才認為它是隨機的.這種由[假隨機數產生器]所產生的數列可通過所有的標準統計隨機檢測. 數位電腦和真實世界一樣是可預期的,卻也是不可預期的,它們都遵循著決定性的法則,但這些法則會導致相當難以預測的複雜結果.在電腦執行之前猜測它所要做的動作是很不切實際的,而通常不需太大的功夫就可以讓計算變得很複雜. ...

Computer Science - 位元和邏輯區組

# 位元和邏輯區組 任何可以表示兩種不同訊息的信號就叫二元(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)設計並建構出可程式化機械電腦的一部分. ...

Computer Science - 作業系統

# 作業系統 指令集複雜度之所以不重要,是因為有副程式.副程式可以讓一串指令在程式中被無限使用.事實上,程式設計師可以用呼叫副程式的方式將原有的指令定義為新的指令.利用 Jump 指令把副程式的位址載入程式計數器中,將執行順序轉移到副程式中,但轉移之前,電腦會將之前程式計數器的內容儲存在特定記憶體中,當副程式執行完時,會有另一個指令讀取到這個返回位址(return address),而讓順序跳回到原先呼叫副程式時的位置繼續執行. 這種呼叫副程式的過程可以遞迴的執行,某個副程式本身可以跳到另一個副程式裡執行,然後這個副程式在跳到別的副程式,依此類推,在遞迴函數中,副程式本身亦可以呼叫自己.為了紀錄這種成層疊加的副程式呼叫過程,電腦必須用一種有系統的方式儲存返回位址,當每個副程式執行完畢時才知道該回到哪裡去.但不能把所有的返回位址都紀錄在同一地方,因為一但副程式成層疊加起來,電腦就必須記住一個以上的返回位址.通常,電腦會將返回位址循序儲存在一群記憶體位置中,稱為堆疊(stack),最後一個返回位址會放在[堆疊頂端(top of the stack)].堆疊記憶體的運作方式就好像疊在一起的盤子一樣,總是從頂端加入或取出東西.這種後進先出(last-in,first-out)的儲存方式,對於儲存一疊疊副程式的返回位址來說確實完美,因為每個副程式都必須等它自己所呼叫的副程式執行完成後才會結束. 電腦中總是裝有一些很有用的副程式,它們統稱為作業系統(operating system). 作業系統包含了能讀寫鍵入字元或是在螢幕上畫線條的副程式,不然就是其他與使用者互動的副程式.作業系統決定使用者所看到的界面,也掌控了電腦與所執行程式之間的界面,這是由於作業系統提供了一套比機械語言指令更豐富且更複雜的指令. 事實上,程式設計師並不在乎他所謂的功能是以電腦硬體或是由作業系統軟體所執行,只要它們能產生同樣的效果就好了.同樣的程式在兩種不同的電腦上運作時,可能其中一個是透過硬體的算術運算執行,而另一個則是以作業系統的副程式來執行.同樣的,電腦的作業系統也會仿效它型電腦的指令集.有時電腦製造商會利用這種模仿方式,讓新型電腦像舊型一樣操作,如此一來就可以不經過任何修改而讓舊有的軟體在新型電腦上運作. 作業系統通常包含執行基本輸入輸出的副程式,也就是能讓程式和外界互動的副程式.其運作方式是將電腦記憶體中某特定位置與鍵盤或滑鼠等輸入設備連接在一起,或是與顯示器之類的輸出設備連接. EX.鍵盤上的空白鍵可能接到記憶暫存器23號,當按下空白鍵時就可以在位址 23 中讀到資料 1,反之讀到資料 0.另一個記憶暫存器可能控制螢幕上的某個點的顏色,假設螢幕上的每一點所顯示的資料都儲存再不同的記憶體位置中,那只要將適當的位元資料寫入記憶體中,電腦就可以在螢幕上畫出任何圖案. 除了這些輸出入機制外,我們所描述的電腦其實只是一部接了記憶體的有限狀態機,而這兩者都可以用暫存器和布林邏輯區組建構出來,控制電腦的有限狀態機相當複雜,設計這樣的機器其實是就是經過一連串記憶體資料,位址和狀態順序等細節,以執行每一個指令,然後再將它的狀態轉換成布林邏輯的過程.既然有限狀態機和記憶體是由暫存器和邏輯區組所組成的,那這些東西就可以用各種技術加以實作, EX.電子電路 液壓管路 滑桿. ...

Computer Science - 布林邏輯

# 布林邏輯 思維規律的研究(an investigation of the laws of thought)-布耳(George Boole) 布林代數(Boolean algebra) 布林代數很像高中所學的的代數,不同的是方程式中的變數所代表的是邏輯敘述而不是數字. 布林的變數象徵對或錯, 透過 MIT工學院學生夏濃(Claude Shannon)的碩士論文,布林的研究結果得以跨入計算機科學領域,夏濃因發明了資訊理論而負盛名,這個理論定義了資訊的計算單位,位元. 夏濃希望建造一部可以下棋的機器,可以模仿人類思考的機器.1940年他發表了碩士論文,替續開關電路的符號分析(a symbolic analysis of relay switching circuits). 他在論文中說明,建立與布林代數運算式相同意義的電路是可行的.夏濃的電路中,開關的On和Off對應布林代數中邏輯變數的對和錯. ...

Computer Science - 有限狀態機

# 有限狀態機 它可以執行隨時間而改變的函數,也就是不但與目前的輸入值有關,也受之前輸入值影響的函數. 有限狀態機的基本構想是將一個對照表與記憶元件加以結合,而這個對照表則是以布林邏輯建構的,記憶元件儲存過去的概要,本身就是有限狀態機的[狀態]. 密碼鎖就是簡單的例子,它的狀態就是記住一連串數字輸入鎖中的結果.鎖並不記得撥過的所有數字,但它可以記住最後輸入的幾組數 字,而這幾組數字就足以在數字序列正確的時候把鎖打開. 自動筆是一個更簡單的例子,它有兩種可能的狀態,伸出筆芯和縮回筆芯,而且還記得它的按鈕被按了奇數次還是偶數次. 所有有限狀態機都有一組固定的可能狀態、一組可以改變狀態的輸入(按原子筆的按鈕or撥動鎖上的數字盤)以及一組可能的輸出(筆 芯的縮回或伸出or開鎖).輸出只由狀態決定,而狀態則取決於輸入的順序. 為了儲存有限狀態機的狀態,需再介紹最後一個建構區域,也就是可以儲存位元的暫存器.n位元的暫存器有n個輸入及輸出端外,另加一個輸入端以告知暫存器何時該改變狀態.將新資訊存入暫存器的動作叫寫入(writing),當定時輸入端告知暫存器要寫入新狀態時,暫存器的狀態便會改變使與輸入訊號相符.至於暫存器的輸出,則總是顯示目前的狀態. 暫存器的裝置有很多種,其中之一是以布林邏輯區組將狀態訊息推入一個圓圈循環中,這種暫存器是電腦中最常用的一種,所以當電源突然中斷時,電腦便不會繼續當時所做的工作. 有限狀態機包含了一個布林邏輯區組及一個暫存器,有限狀態機將布林邏輯區組的輸出寫入暫存器中,然後邏輯區組會依新的輸入及當時的狀態計算出下一個狀態,並再下一個循環寫入暫存器中,如此週而復始的重複,有限狀態機因此不斷更新其狀態. 包括電腦在內的許多數位計算裝置也都已固定的時間間隔變換其狀態,而變換的頻率則稱為這部機器的時脈(clock rate),在電腦的世界裡,時間並不是連續的,而是一組固定的變換序列.電腦的時脈決定這些狀態變換的速度,因此也決定了實際時間與計算機時間的對應關係. 雖然有限狀態機的功能非常強大,但它卻無法辨識所有序列形式.例如,我們不可能建構一個用迴文開鎖的有限狀態機,所謂迴文就是由前往後唸和由後往前唸都一樣.因為迴文的長度不一定,且必須要記住迴文前半部中的每個字,才能辨識後半部,又由於前半部有無限多種可能,因此需要一部具有無限個狀態的機器才能處理. ...