發表文章

網路程式開發者所需要的網路知識 ( Concepts for a network programmer )

圖片
身為一個網路程式開發者所需要的網路知識可能如下: 網路工具的使用。 網域名稱與主機位址。 通訊協定。 網路封包。 網路工具的使用 在Linux Ubuntu上可利用下面指令來安裝網路工具: sudo apt - get install netcat - openbsd tcpdump traceroute mtr 請在Linux下試試底下的指令: ip addr show eth0 ip route show ping - c3 8 . 8 . 8 . 8 ip route show default netstat - nr host - t aaaa google.com host - t mx tw.yahoo tcpdump - n - c5 - i eth0 port 22 traceroute tw.yahoo.com mtr tw.yahoo.com printf 'HEAD / HTTP / 1 . 1 \ r \ nHost : tw.yahoo.com \ r \ n \ r \ n' | nc tw.yahoo.com 80 在Windows系統下,有 netstat 與 ping 指令可以用來檢查電腦的網路狀態。此外若需要分析封包時,可用 Wireshark 這套軟體來協助。 檢測電腦 IPv6 的功能網頁: http://test-ipv6.com/ 網域名稱與主機位址。 網域名稱(Domain Name) 是用來辨識網路上某一台電腦,以Google為例, www.google.com 剛好是Google的網域名稱與搜尋引擎網址的名稱,每一個網域名稱通常會有至少一組的 IP位址(住址),這可用 ping 的指令來查詢到,而 www.google.com 所對應的IP可能為108.177.97.106。 【那這IP是從何而來的?】透過網路上的 Domain Name System所存放的網域名稱與IP對應表,一個網域名稱所對應的IP就可被查詢到了。 另外,現存的主機位址有 32 bits 的 IPv4 與 128 bits 的 IPv6 。此外也需要分清楚 私有網路 與公開網路以及實體IP、虛擬IP、固定IP、子網路( Subnetwork ...

如何學好物件導向程式設計

圖片
本文為延續 如何學好程式語言 一文,要來說明學習物件導向程式設計需要的學習目標有哪些: 物件(Objects) 類別(Classes) 繼承(Inheritance) 多型(Polymorphism) 封裝(Encapsulation) 物件(Objects) 所有的東西都是物件。(Everything is an object.) 這句話是什麼意思呢?舉凡看的到、摸的到、看不到、摸不到、聞的到的東西等,只要說得出名稱的都可以稱為物件, 所以「看到鬼了!」這句話中的「鬼」是個無形的物件 ( 嗎? )。鉛筆、原子筆等就是 有形的物件 。在程式碼中的變數名稱就是程式語言中的物件,例如下面程式碼: int grade; String studentName; grade 可能是用來表示「成績」這個物件。 studentName可能是用來表示「學生姓名」這個物件。 在程式碼中物件的宣告(定義)方式如下, Object objName; Object是物件的型態,有可能為基本型別:int, float, char, ...etc,或是類別(Class)型別。談到類別的話,就請往類別一小節閱讀。 每個物件都有行為與特徵,例如人這個物件會跑、說、走、跳等行為,人有身高、體重、膚色等特徵,行為在程式語言裡常用成員函式(Member functions)來實現,而特徵常用類別的成員資料(Member data)來表示。 類別(Classes) 因為程式語言內建的基本型別只能記錄少許的資訊,例如int型別就只能記錄整數部分,於是在C語言中有 strcut 的出現,可用來記錄不同型別的資訊例如: struct Computer { int product_id ; char * cpuType ; int * ram ; float price ; }; 上述例子Computer紀錄了四筆資料,但這樣還不能描述物件的 行為 。於是電腦科學的專家們想出classes這個觀念出來,用類別來表示物件的藍圖(積木),於是【 將現實生活中的物件變成程式語言中的軟體物件 】這一過程叫做 資料抽象化 。物件與類別的圖文說明可參考此文: Objects and Classes in Java 。 ...

如何學好程式語言

本文不提如何 自學程式設計 ,而是說明「決定要學程式語言時,要如何 學好 它」,大致上有下面幾點需要學習的: 如何使用變數。 如何運用陣列。 如何運用判斷敘述。 如何運用重複結構。 如何定義函式。 如何使用函式庫 libraries 。 如何除錯 debug。 以上幾點若能熟練的話,對於小程式來說是足夠的。底下會根據各點分別說明。 如何使用變數 此部分包含需要知道變數的型態,以及這個變數可以用來做什麼,例如此行程式碼  int sum; 是代表用來做整數的加總嗎?這可不一定,那下面一行程式碼的變數應該就是用來做整數的加總了吧!  int sumOfIntegers; 或許是吧!以上兩例的變數是為了要說明 變數命名 的重要性,變數命名就好像在取人名一樣,取的好,看程式碼的人就容易了解,也有助於 程式碼的可讀性 。此外, 變數範圍(Variable Scope) 也需要了解。 如何運用陣列 陣列 英文為Array,為 資料結構 的一種,此部分包含如何定義一個陣列、如何賦值給陣列、一維陣列、二維陣列、 尋找陣列中的元素、陣列元素的排序等。 如何運用判斷敘述 需活用if-then-else、switch的判斷敘述,以及比較運算子與邏輯運算子,再來就是巢狀判斷敘述的運用。 如何運用重複結構 需了解所學的程式語言有哪些loops 迴圈敘述語法,例如C語言有 for、while、do/while等重複結構,重複結構的目的是讓某一段程式碼重複執行,就像我們每天早上會吃早餐、刷牙、洗臉等,這些早上做的事一年會重複好幾次,而程式語言就是用重複結構來做類似的事。 如何定義函式 函式 在不同的程式語言裡有不一樣的英文名稱,在Java叫做 Method,C/C++叫做Function,Visual Basic叫做Procedure等。函式和數學函數有相同的地方:都是用來運算用的。只不過函數是數學運算,而函式是告訴CPU處理器做一些事情。了解如何定義函式後,也須學習如何使用函式,更進階一點還需要瞭解 遞迴函式(Recursion) 。 如何使用函式庫 libraries  「除非必要,否則別從頭打造積木。」在現今的軟體開發裡,很少有人自己從頭打造軟體積木了,因為很多的軟體積木已經被打造出來...

螢幕白板筆 Pointofix 介紹

圖片
筆者從網路上找到這套用來桌面塗鴉的軟體,剛好有繁體中文的介面可以使用,於是筆記一下。官網: http://www.pointofix.de/download.php 中文化方式見下圖: 用免安裝版本就可以帶著跑了。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

Python 繪製三角函數圖形

圖片
問題:「如何使用Python來繪製 三角函數 圖形呢?」 OK,在繪製圖形前,先來了解 Python 的數學程式庫( Mathematical functions )有哪些,從3.6.2的文件可看到如下: 9.2.1. Number-theoretic and representation functions 9.2.2. Power and logarithmic functions 9.2.3. Trigonometric functions 9.2.4. Angular conversion 9.2.5. Hyperbolic functions 9.2.6. Special functions 9.2.7. Constants 在Trigonometric functions一節中可查到底下三個: math. cos ( x ) Return the cosine of  x  radians. math. sin ( x ) Return the sine of  x  radians. math. tan ( x ) Return the tangent of  x  radians. 所以可以用這三個數學函數來繪製。但是Python有比上面函式還好用的程式庫,叫做 NumPy 。使用 NumPy 可以快速產生繪圖資料。接下來要處理繪圖的功能,在 Python 的程式庫中,有 Matplotlib 可用,就用此程式庫來繪圖囉。 範例程式: 輸出圖: 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

mBlock Scratch Extension for Otto Robot

圖片
Hello everyone, the mBlock extension for otto robot is introduced in this article. 大家好,本文會介紹 mBlock 的 otto 擴展積木。(Download: Otto  ) Manage Extensions in mBlock, select Otto Extension. 在mBlock 的擴展管理器選擇 Otto。 The bluetooth code  https://github.com/OttoDIY/PLUS/tree/master/Bluetooth%20codes/OTTO_BT is used in this extension. 要使用此擴展,須將Otto的程式更新為官方的 OTTO_BT 程式。 After uploading OTTO_BT code to otto, it can be interacted with this mBlock extension(in Scratch mode). 將 OTTO_BT 程式上傳到 OTTO 控制板上,就可以使用此擴展與mBlock互動。 The extension blocks: Demo Video: "What is Otto ? Otto is an interactive robot that anyone can make!" Otto是什麼?Otto是自己可以製作的互動機器人! For more information, please go to  http://otto.strikingly.com/  . 詳細介紹請至官網  http://otto.strikingly.com/ 。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.

PHP 教師研習筆記

圖片
上周三至周五(7/19~7/21)參加由雲林縣縣網所舉辦的教師研習:「 PHP 程式設計」。講師的教學網頁為: http://163.27.230.30/~kwc/PHP_MySQL/ 。 講師的授課大綱如下: Day 1 PHP開發環境建立 XAMPP Visual Stduio Code PHP基礎程式設計 工欲善其事,必先利其器。先從如何建立好開發環境講起,講師特別推薦 Visual Stduio Code 來開發PHP程式,並搭配 XAMPP 來安裝WebServer、DB與PHP環境。接著講解PHP程式語言的基礎語法。 Day 2 PHP進階程式設計 MySQL資料庫 Adminer phpMyAdmin 資料庫新增、查詢、修改、刪除( C reate, R ead, U pdate, D elete) PHP與MySQL資料庫 延續前一天的PHP語法講解,主要集中在PHP的類別與方法部分,接著說明如何使用PHP做檔案的上傳,再來就是MySQL資料庫的使用與CRUD的SQL語法。 註:在檔案上傳的部分,有同學遇到底下的問題: Notice: Undefined variable... 原因是因為  enctype="multipart/form- data " 打成  enctype="multipart/form- daya " 或是檔案的變數名稱不相同。 Day 3 BootStrap git版本控制 隨筆系統 介紹BootStrap,並使用BootStrap建立一個隨筆系統的首頁,搭配git版本控制來做程式碼的版本管理,最後以一個隨筆系統作為練習。 筆者最後一天的成果截圖: 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or  buy me a coffee . Thank you very much.