管理員
統計數據
原文網址 石小川 2020-03-27 15:51:22
上過我的課的同學應該知道, Qt5的Designer GUI拖拉元件還蠻方便開發APP的。如果熟悉Qt5且想更進一步在手機上執行你寫的應用程式,可參考下列方式建置Android下的Qt5開發環境。(至於IOS, 因為老師目前沒有iPhone就先不提了)。 繼上回介紹的手機程式開發工具Android Studio後,其實在手機上寫APP程式還有另一個選擇開發工具就是Qt5,我還挺喜歡用它的原因是無論Android版Qt5、Python版Pyqt5、Windows版Qt5,我只要維護一個程式碼就好,其他就只是環境移植而已,不是甚麼大工程,修改幅度不大。 QT5.10.0的Android 開發環境建置請參考下列連結 : https://blog.csdn.net/qq_28643619/article/details/86589252
Xi Kris 2020-03-27 15:59:33
請問像qt 這樣的拖拉GUI設計,在之後如果要進行layout 的重置會不會很容易出現問題。 (在python 程式碼以及XML檔之間的問題)
石小川 2020-03-27 16:06:16
不同機器的layout佈置一定要用相對位置, 移植才不會出大問題。 Qt Designer 儲存的是.ui檔,結構類似XML格式,因為我們期望是要給Python 引用,所以我們必須想辦法將.ui檔轉換成.py檔才行。 PyQt5提供一個命令列工具pyuic5可以很輕鬆地完成轉換工作,使用方式如下 : pyuic5 source.ui -o destination.py
Xi Kris 2020-03-29 15:59:48
想請問~ 如果是把layout的ui.檔跟python 程式碼分開這樣會不會比較方便之後的維護呢?
石小川 2020-03-29 19:55:47
Xi Kris 當然!
Xi Kris 2020-03-29 22:37:34
石小川 先生想請教您, 那如果使用pyuic5 將ui文件轉為py文件的話,如果更改layout 之後的話,是不是又要重整之前多添加的程式碼? 我還是pyqt初學者,有點不瞭解。 目前我是使用uic.loadUiType("xxx.ui")的方式把ui檔案引入IDE 編寫。 覺得這樣ui檔案如果更改的話,程式碼也不會受影響。 請問您都是用pyuic5的轉換來維護程式碼嗎?
石小川 2020-03-30 08:12:49
Xi Kris 可參考 第一單元 使用Python開發多軸運動控制機電系統 : "Python + PyQt5 教學 - 圖控介面開發工具 QT Designer" 有詳細說明。
原文網址 石小川 2020-03-25 15:44:14
常聽到朋友談起學完程式設計(特別是學會Python爬蟲)後,不知道如何應用這個技能! 今天要介紹現代人必讀的兩本書。一本是大數據(Big data) 和另一本是如何衡量萬物(How to Measure Anything), 我會建議學完程式語言後,這兩本書可拿來當小說看看, 也許答案就在裡面。 (A)Big Data: A Revolution That Will Transform How We Live, Work, and Think (B)How to Measure Anything: Finding the Value of "Intangibles" in Business p.s. (A)Big Data是大數據原文書,(B)是如何衡量萬物也有中譯本,值得一看。 無論你身處在何種行業(包括學生), 讀完此書後各人感受不同, 雖不敢說你會脫胎換骨, 但至少可訓練你判斷人、事、時、地、物的邏輯分析能力. 巨量資料分析已經成為新的研究科學工具, 如果你懂的程式設計, 甚至可進一步實作出屬於你自己的大數據, 應用在分析問題及決策參考上. 我是覺得書中逆向思考的方式蠻有趣的, 值得推薦給對世界充滿好奇的朋友閱讀. 下列為其部份內容摘錄大數據: 巨量資料初試啼聲 說巧不巧,就在H1N1躍上新聞頭條的幾星期前,網路巨擘谷歌(Google)旗下的幾位工程師,在著名的《自然》科學期刊發表了一篇重要的論文,當時並未引起一般人的注意,只在衛生當局和電腦科學圈裡引起討論。該篇論文解釋了谷歌能如何「預測」美國在冬天即將爆發流感,甚至還能精準定位到是哪些州。 谷歌的祕訣,就是看看民眾在網路上搜尋些什麼。由於谷歌每天會接收到超過30億筆的搜尋,而且會把它們全部儲存起來,那就會有大量的資料得以運用。 谷歌先挑出美國人最常使用的前5,000萬個搜尋字眼,再與美國疾病管制局在2003年到2008年之間的流感傳播資料,加以比對。谷歌的想法,是想靠著民眾在網路上搜尋什麼關鍵詞,找出那些感染上流感的人。雖然也曾有人就網路搜尋字眼做過類似的努力,但是從來沒人能像谷歌一樣掌握巨量資料(Big Data,本書譯為大數據),並具備強大的處理能力和在統計上的專業技能。 雖然谷歌已經猜到,民眾的搜尋字眼可能與流感有關聯,像是「止咳退燒」,但有沒有因果關係並不是真正的重點,他們設計的系統也不是從這個角度出發。谷歌這套系統真正做的,是要針對搜尋字眼的搜尋頻率,找出和流感傳播的時間、地區,有沒有統計上的相關性(correlation)。他們總共用上了高達4.5億種不同的數學模型,測試各種搜尋字眼,再與疾管局在2007年與2008年的實際流感病例加以比較。他們可挖到寶了!這套軟體找出了一組共45個搜尋字眼,放進數學模型之後,預測結果會與官方公布的全美真實資料十分符合,有強烈的相關性。於是,他們就像疾管局一樣能夠掌握流感疫情,但可不是1、2星期之後的事,而是幾近即時同步的掌握! 因此,在2009年發生H1N1危機的時候,比起政府手中的資料(以及無可避免的通報延遲),谷歌系統能提供更有用、更即時的資訊。公衛當局有了這種寶貴的資訊,控制疫情如虎添翼。 最驚人的是,谷歌的這套方法並不需要去採集檢體、也不用登門造訪各家醫院診所,而只是好好利用了巨量資料,也就是用全新的方式來使用資訊,以取得實用且價值非凡的見解、商機或服務。有了谷歌這套系統,下次爆發流感的時候,全球就有了更佳的工具能夠加以預測,並防止疫情蔓延。 巨量資料功能強大,可以讓許多領域改頭換面,公共衛生領域不過是其中之一,而商業領域也正在經歷這個過程。
原文網址 石小川 2020-03-18 19:49:48
Android Studio是Google官方自家推出的免費開發工具,學習Android程式設計當然首選是Android Studio。 現在智慧手機功能強大, 多核心、影像、語音、通訊、GPS該有的都有了,隨身攜帶配合不同Sensor,想到智慧手機就有128種用途,不好好利用它實在浪費,計畫開相關Android軟/硬體實作課程。有興趣的同學可先下載Android Studio熟悉一下開發環境。 p.s. 因為Android Studio主要是用Java語言來開發程式,下次再貼文如何用Python結合Android Studio開發應用程式的方法。 注意,必須先安裝JDK,再安裝Android Studio。 步驟1. JDK下載與安裝: 須確定你的作業系統是32位元或64位元,然後選擇32位元或 64位元。 https://www.oracle.com/java/technologies/javase-jdk14-downloads.html 因為我的OS是Win10 64位元,故選 jdk-14_windows-x64_bin.exe 圖1 ? 步驟2. 確認JDK安裝版本是否正確 進入命令列視窗後輸入「java -version」指令,即可查詢目前java運作的版本。 圖2 ? 步驟3. Android Studio下載與安裝 請到下面官網Android Developers 下載,安裝很簡單,按Next鍵就對了。 https://developer.android.com/studio ? 圖3 步驟4. Android Studio IDE 如圖開發環境特寫。 ? 圖 4
原文網址 石小川 2020-03-14 13:57:44
今天不談神經網路的推導公式,先把它晾在一邊,我們來說說自動程式產生器應用到神經網路學習模型的開發。
深度學習已經大幅提升了影像、語音的辨識率,但實際上,底層的神經元(neuron)及網路是極度簡化下的模型,只能說還是有很大的成長空間,因此才會冠上類神經網路(ANN)模型的名稱。
圖是N年前為了做影像處理專案時設計的一個影像功能拖放(drag and drop)圖控軟體框架,主要就是將所有影像的演算法封裝在工具箱圖控(icon)元件中,使用者只要拖拉不同icon連結或直接將icon放置在圖片上就可自動影像處理,很像現在的LabVIEW,設計的理想就是做到了end user不用再寫任何影像處理有關的程式。
這跟神經網路有甚麼關係呢?
現在很多人工智慧的產品卻沒有人工智慧! 我們當然希望按一個鍵,電腦就可以幫我們完成幾百甚至上萬件事情,而不是反過來要看厚厚的手冊、學幾年的程式語言只為了完成一件事。當然上述我是有點誇張,不過我主要訴求就是要有一些人工智慧,程式就盡量自動化產生,雖然我也很愛Coding。
最後回到正題,計畫用Python 和 C++做類似圖中的圖控軟體框架,改寫成一個自適應類神經網路的專家系統,研究者只要拖拉圖控元件,讓電腦自已完成神經網路的架構及模型推論,當然我會把一些深度學習及機器學習演算法也封裝進圖控元件中,因為我這邊的超級電腦還沒搞定,所以大概只能跑一般的GPU了。
p.s. 這個版本會開源,因為只能假日抽空整理,以陸續釋放程式碼的方式為主。有興趣的朋友就當作一起線上技術交流研討^^
原文網址 石小川 2020-03-07 18:57:10
當相同類型的程式時常使用或必須重複呼叫時,這時就是考慮將副程式加進程式庫的時候,我習慣將功能相同的函式放在一起製作專用的程式庫,例如處裡影像副程式放在TImage.dll、處裡語音副程式放在 TSpeech.dll、處裡神經網路程式放在TNeuron.dll、處裡光達程式放在TLidar.dll等等 , 一旦你的程式庫累計的夠多的話,將來設計APP應用程式就會如同貼圖一樣方便,只要呼叫程式庫就好,主程式變少了。 接下來Demo一個動態程式庫TSystem.dll,裡面函式是負責儲存使用者最後操作各個視窗元件位置及大小的資訊, 請一步步看圖解。 step1. 建立新的專案。 圖1 ? step2. 選 C#類別庫, 按下一步。 圖2 ? step3. 設定新的專案, 並按建立。 圖3 ? step4. 設計程式碼TSystem.cs。 //---------------------------------------------------------------------- //動態程式庫 TSystem.dll 範例 //---------------------------------------------------------------------- using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Drawing; namespaceTSystem { public class WindowPosition { //--------------------------------------------------------------------- public void WriteSystemInfo(string FileName, Point position) { BinaryWriter WriteFile = new BinaryWriter(File.Open(FileName, FileMode.Create)); WriteFile.Write(position.X); WriteFile.Write(position.Y); WriteFile.Close(); } //------------------------------------------------------------------------ public Point ReadSystemInfo(string FileName) { if(!File.Exists(FileName)) return new Point(-1, -1); BinaryReader ReadFile = new BinaryReader(File.Open(FileName, FileMode.Open)); Point position = new Point(ReadFile.ReadInt32(), ReadFile.ReadInt32()); ReadFile.Close(); return position; } } //public class WindowPosition //------------------------------------------------------------------------- public class WindowhSize { //--------------------------------------------------------------------- public void WriteSystemInfo(string FileName, Size size) { BinaryWriter WriteFile = new BinaryWriter(File.Open(FileName, FileMode.Create)); //main form size WriteFile.Write(size.Width); WriteFile.Write(size.Height); WriteFile.Close(); } //------------------------------------------------------------------------ public Size ReadSystemInfo(string FileName) { if(!File.Exists(FileName)) return new Size(-1, -1); BinaryReader ReadFile = new BinaryReader(File.Open(FileName, FileMode.Open)); Size size = new Size(ReadFile.ReadInt32(), ReadFile.ReadInt32()); ReadFile.Close(); return size; } } //public class WindowSize } //namespace TSystem step5. 建置方案, 產生TSystem.dll。 圖4 ? step6. 產生的TSystem.dll的檔案及路徑。 圖5 ? step7. 主程式呼叫TSystem.dll, 需將產生的TSystem.dll加入參考。 圖6 ? step8. 主程式呼叫TSystem.dll( 關注//Note的地方即可 )。 //---------------------------------------------------------------------- //C# 主程式呼叫動態程式庫 TSystem.dll 範例 //---------------------------------------------------------------------- using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; using Emgu.Util; using Emgu.CV.UI; using Emgu.CV.BgSegm; using Emgu.CV.VideoSurveillance; //Note using TSystem; using TCamera; //----------------------------------------------------------------------------- namespace VT { public partial class MainForm : Form { //--------------------------------------------------------------------- public ToolboxForm CreateToolboxForm(Form parent, string text, bool bshow = true) { ToolboxForm toolboxForm; toolboxForm = new ToolboxForm(); toolboxForm.MdiParent = parent; toolboxForm.Text = text; if(bshow) toolboxForm.Show(); return toolboxForm; }//---------------------------------------------------------------------public ImageXYForm CreateImageXYForm(Form parent, int number,stringtext, bool bshow = true){ ImageXYForm imageForm; imageForm = new ImageXYForm(number); imageForm.MdiParent = parent; imageForm.Text = text; if(bshow) imageForm.Show(); return imageForm;}//---------------------------------------------------------------------public static MainForm _gmainForm = null;public static ToolboxForm _gtoolboxForm = null;public static ImageXYForm _gimageXYForm = null; //Note public WindowhSize _winSize = null;//---------------------------------------------------------------------//Main Program//---------------------------------------------------------------------public MainForm(){ InitializeComponent();}//---------------------------------------------------------------------private void MainForm_Load(objectsender, EventArgs e){ _gmainForm = this; //Note //讀取系統設定檔 _winSize = new WindowhSize(); Size size = _winSize.ReadSystemInfo(@"..\..\system\mainform.inf"); if(size.Width == -1 && size.Height == -1) this.ClientSize = new Size(1200, 700); else this.ClientSize = new Size(size.Width, size.Height);//修改mdi窗体背景色--------------------------------------------------------MdiClient ctlMDI;// Loop through all of the form's controls lookingforeach(Control ctl in this.Controls){ try { // Attempt to cast the control to type MdiClient. ctlMDI = (MdiClient) ctl; // Set the BackColor of the MdiClient control. ctlMDI.BackColor = Color.LightGray; //this.BackColor; //Color.Blue; } catch(InvalidCastException) { // Catch and ignore the error if casting failed. }} _gtoolboxForm = CreateToolboxForm(this, "工具箱"); _gimageXYForm = CreateImageXYForm(this, 0, "XY軸攝影機");} //private void MainForm_Load(object sender, EventArgs e)//--------------------------------------------------------------------- private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { //Note _winSize.WriteSystemInfo(@"....\system\mainform.inf", new Size(this.ClientSize.Width, this.ClientSize.Height)); } } //public partial class MainForm : Form } //namespace VT step9. 執行主程式成功。 圖7 ?
原文網址 石小川 2020-03-03 10:52:38
上課學員對 Visual Studio 2019 產生視窗程式不熟悉時可參考以下步驟,這套工具很實用也簡單,足夠你發展強大的應用程式,值得同學花時間駕馭它。 步驟1 如圖1, 建立新的專案。 步驟2 如圖2, 選Windows Forms App(.NET Framework) 項目,並按下一步鍵。 步驟3 如圖3, 設定新的專案,並按建立鍵。 步驟4 拖拉元件寫程式,請參考 使用Visual Studio 2019 產生一個視窗程式的簡單教學 - II 投影片說明(VS2019產生一個App.mht)。 圖4是程式WindowsFormsApp1執行的樣子。 Form1.cs 程式如下, 大部份程式碼是VS自動產生的, 我只寫兩行。 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Windows.Forms; namespaceWindowsFormsApp1 { public partial class Form1: Form { public Form1() { InitializeComponent(); } private voidbutton1_Click(objectsender, EventArgs e) { richTextBox1.Text = "OK"; //自已加上 } private voidbutton2_Click(objectsender, EventArgs e) { Close(); //自已加上 } } }
原文網址 石小川 2020-02-06 14:41:27
近期要開 "使用C# 及 Python語言開發伺服端-用戶端遠距遙控和即時影像傳輸課程",採遠距教學,因為會用到免費工具軟體,先貼文開發環境建立步驟,讓有興趣的學員預先下載複習! 請參照附錄A及附錄B。 附錄A – Visual Studio2019 C# 開發環境安裝步驟 步驟1 到下面微軟官方網站下載 Visual Studio2019 Community版本(圖A1) https://visualstudio.microsoft.com/zh-hant/downloads/ ? (圖A2) 步驟2 將來影像處理會用到OpenCV,建立專案後順便安裝EmguCV。 開啟 Visual Studio2019,進入專案後,如圖選擇管理方案的 NuGet套件。 ? (圖A3) 如圖瀏覽處輸入Emgu搜尋到EmguCV v3.1.0.1,選取此版本按下滑鼠安裝。 ? 回到工具項,按選擇工具箱項目。 ? (圖A4) 在專案項,選擇加入參考 專案裡面有個資料夾packages\EmguCV.3.1.0.1\lib\net30 裡面有.dll全部加入參考。 ? (圖A5) 此時工具箱多出四個元件表示安裝成功。 ? (圖A6) 用NuGet套件管理員安裝很方便,但不同專案必須重新安裝一次,也可 手動在專案/加入參考加入自行下載的動態連結程式庫(dll),如此所有專案都 可引用。這部分留給讀者自行練習了。 附錄B – Python開發環境安裝步驟 因為我手邊的 iMC3082E 運動卡是32 Bit,所以下載 32 bit版本。 (如果Python不直接用來呼叫32 bit動態連結庫的話,只設計用戶端連線,其實 也可使用64 bit版本) 步驟 1 安裝 免費開源的 Python 整合開發環境 Anaconda 到官網 https://www.anaconda.com/distribution/ 下載並執行( Python 3.7 Version 32-Bit ) : Anaconda3-2019-.07-Windows-x86.exe Anaconda 會自動幫你管理 Python 的環境及函式庫,可以避 開一堆麻煩事,如果你的API 動態連結程式庫(DLL)是32 Bit,則Python版本就必須是32 Bit, 否則App執行會錯誤, 如果之前已經有安裝 Python,建議先移除,避免造成系統環 境錯誤。 圖1-1 ? 步驟 2 建議選 All Users。 圖1-2 ? 步驟 3 可自選路徑,Win10 預設的路徑是在 C:\ProgramData\Anaconda3,我路徑放在 C:\Anaconda3\。 圖1-3 ? 步驟 4 建議勾選 Add Anaconda to the system PATH environment variable ,這很 重要,勾了才會自動將 Anaconda 路徑加進系統環境變數中。 圖1-4 ? 步驟 5 安裝完成,建議 Windows 作業系統重先啟動。 圖1-5 ? 步驟 6 滑鼠左鍵開啟 Anaconda Prompt 視窗(Windows 命令提示字元) ,用 Python 指令 pip install 安裝下列開發程式需要引用的套件 pip install opencv-python pip install numpy pip install PyQt5 pip install PyQt5-tools 圖1-6 ? **[註1] **spyder 3.3.6 尚未支援 pyQt5 ver.5.13.1 我的版本: PyQt5 Version is: 5.9.2 改這個版本看看 方法: Command Line 打下列指令, 指定版本 pip install PyQt5==5.9.2 **[註 2] **pip 是Python套件管理系統(A tool for installing and managing Python packages) ,在命令列下可很輕易地安裝Python套件。 PIP 操作命令 pip list # 查詢目前系統安裝了哪些套件 pip search package # 搜尋相關套件 pip install package # 安裝套件 pip uninstall package # 移除套件 pip show --files package # 秀出套件檔案列表 pip list --outdated # 列出過期套件 pip install --upgrade package # 升級套件
Lai YenYu 2020-02-06 15:31:39
開課資訊在何處呢
John Chou 2020-02-06 16:15:53
推!請教開課平台..?
原文網址 石小川 2020-01-30 19:09:12
使用Python語言做自動控制的方法 - I I I通信篇 網路發達後要做到機器設備遠端監控已非遙不可及了,網路通信在無人工廠的監控設備上會越來越重要。 圖中展示的系統是TCP/IP通訊協定的主從(Server-Client)式架構,TServer伺服端程式負責現場機器設備運作及回傳Sensor數據和即時影像給TClient用戶端處理。 為了方便教學緣故,已將網路封包加密演算法及帳號管理拿掉,通信程式精簡許多,比較容易理解,伺服端是以C#實作,用戶端會以C#及Python各實作一個版本。建議伺服端以C++或C#為主,而用戶端可用Python設計遠端控制APP,將來回傳的遙測大數據可很容易的用Python模組分析。 熟悉遠端操控軟硬體對將來有志設計無人工廠機器設備的朋友幫助很大,習得一技之長絕對增加競爭力。2月分我將開此TCP/IP主從式通信實作課程,因為現在病毒肆虐,採遠距教學方式較適合,沒有機器設備的同學我會提供兩台三軸機台做遠距連線操控練習,可在家寫Python程式做遠端連線操控,詳細辦法及日期我再擇期公布,歡迎有興趣的朋友來報名上課。 回顧這幾個月不知不覺教完三大篇了... 使用Python語言做自動控制的方法 - I 軟體篇 使用Python語言做自動控制的方法 - I I 硬體篇 使用Python語言做自動控制的方法 - I I I通信篇 頭髮也少了好幾根,謝謝同學的支持,三月份正式進入實戰機器視覺的領域, 內容是影像辨識、3D量測、雙目測距及定位等應用課程,會以OpenCV及Halcon工具軟體為主,屆時歡迎報名!
石小川 2020-01-30 19:26:08
少了一張用戶端TClient的圖片, 補上!
原文網址 石小川 2020-01-17 01:29:36
圖中程式都是早期用C++ Builder 5.0版本開發的一些語音辨識合成工具軟體,程式是用MFCC特徵處裡語音信號, 辨識引擎是用RNN神經網路。其中語料有幾萬筆,含括中英文連音、單音,詞庫等,如果有興趣用Python + GPU開發語音辨識合成的朋友可連繫我提供原始碼修改, 語料庫因為有版權無法公開放送,但可以借用!
賴建宏 2020-02-14 08:13:30
有興趣
Cheng Yu Wang 2020-02-14 19:51:11
有興趣 2
原文網址 石小川 2020-01-13 12:48:30
又叫迴旋鏢,迴旋鏢的空氣動力學不簡單,不輸太空梭飛行的複雜度,會對飛行動力物理學有興趣,是因為小時看到迴旋鏢射出後居然還會飛回來了,我還玩得挺上手的,澳洲土著以前拿來獵袋鼠,以前就懂這種力學原理實在不簡單,我就以此當作這個單元的起步。 今天要介紹的是一個很不可思議的發明, 回力鏢(Boomerang), 我習慣稱它為『迴旋鏢』, 將它擲出後利用空氣動力學原理飛回來, 使用的歷史可追溯1000年至30,000年的歷史, 在非洲和歐洲的岩畫和遺跡中都有記載. 已知澳洲原住民曾用它作為狩獵工具. 我從國中開始就很喜歡玩迴旋鏢, 無師自通找到了訣竅, 用力丟出去讓它快速旋轉後真的可以飛回手上, 感覺自己好像是當時最紅的卡通人物科學小飛俠鐵雄及海底小遊俠, 因為他們都是使用迴旋鏢(或叫飛龍斬)當作武器的. 我很好奇的是迴旋鏢的空氣動力學複雜程度不輸太空梭, 古代的人是怎麼知道這些原理的? 世界之大, 無奇不有, 也許真該想想, 古代人是不是比我們聰明^^ 資料取自維基及網路 https://zh.wikipedia.org/wiki/ 回力镖
海闊天 2020-01-13 14:11:50
這篇有趣的多喔!
海闊天 2020-01-13 14:12:48
石小川 2020-01-13 14:17:49
哈哈! 祝新年快樂
郭玉傑 2020-01-13 14:26:55
小川大哥您這篇的比喻實在是太精彩了!
石小川 2020-01-13 14:39:31
謝謝玉傑,原來妳對物理有興趣! 祝新年快樂^^
郭玉傑 2020-01-13 14:48:24
小川大哥也祝您新年快樂喔! 其實我對物理 還是不是很懂,但是因為小川大哥您的比喻,讓我有點了解了!
Jerome Tw 2020-01-13 15:50:17
我來獻醜打個比方 ☺️ ☺️ 這或許跟咱們中國古老的食物相剋圖是類似的發現原理 也就是一開始並不了解"為什麼"會這樣 只知道某些組合會變成這樣 例如古人流傳下來的食物相剋圖提到"牛肉與栗子同食"會引起嘔吐 以現代醫學觀點會說是因為栗子含有較多的產熱營養素,多食則不易消化。而牛肉含有豐富的蛋白質,肉質緻密,吃得過多也不易消化吸收。若二者同煮共食,更不易消化吸收,會引起腹脹嘔吐不消化的症狀。 猜想古人應該是用try-and-error方法來綜合得到兩者不共食的結論 也就是在古代可能有成百上千人因為牛肉與栗子一起吃而被脹得難受後跑去找醫生 古代醫生也沒有先進儀器得以檢測緣由 只能依"望聞問切"原則從而歸納得出食物相剋圖的結論 回力鏢的發現過程可能也類似 先人並不瞭解為什麼這種彎曲形狀的木頭後不僅僅很會飛 還會飛回來!一開始使用的木頭可能是一根直挺挺的棒子 直到某一天撿到一根稍微彎曲的木頭再丟出去一次後 發現它竟然會回頭一小段 某位明智的土人下次便再找根更變曲的木棍 再丟再撿再挑 再丟再撿再挑 不停重覆過程 終於收歛成為流傳到後世的最穩定形狀.... # 以上純屬在下的個人小品創作 ? ? # # 小川哥_新春發大財_機器不當機_程式無BUG ! ? ?
海闊天 2020-01-13 18:28:39
對啦!本來是新年快樂,但從前天晚上就開始不開心了!
石小川 2020-01-13 19:16:21
哈哈....說得好^^, 也祝你新年快樂!
石小川 2020-01-13 19:21:59
開心點,將來會因禍得福, 歷史會還公道的!
林志強 2020-01-13 19:54:40
石小川 2020-01-13 20:55:59
祝新年快樂^^
鍾小生 2020-01-13 23:12:33
很棒的引言,川哥的思維很不一樣喔.<``>
石小川 2020-01-13 23:55:30
哈哈! 祝老弟新年快樂, 生意興旺^^
鍾小生 2020-01-14 07:02:45
謝哥金口,也祝川哥諸事順心。
全不選 發文排行