2019年1月14日 星期一

Phython 學習筆記 - Windows中安裝Matplotlib

目標: 想要用Phython來畫3D Line plot

我的Phython version:3.5.2


1. 先安裝3D Library for Phython, 使用Matplotlib

打開windows command line. 分別鍵入下列兩行指令進行自動安裝

python -m pip install -U pip
python -m pip install -U matplotlib










第一個pip安裝很快,約1~2分鐘裝完
第二個大約要裝個5~8分鐘

安裝完大概長這樣:















安裝方法參考網址
https://matplotlib.org/index.html




2017年11月30日 星期四

[Windows][C/C++] 如何得知Windows中資料夾內的檔案是否被修改(修改時間)


目標是偵測某個資料夾底下的檔案是否有被修改過?可以透過讀取檔案的Last modified time


在Windows底下可以呼叫system API: GetFileTime() function:

API說明可到MSDN:

https://msdn.microsoft.com/zh-tw/library/windows/desktop/ms724320(v=vs.85).aspx


透過這個API可以將檔案的下列三種時間:
 1. Create time,
 2. Last access time,
 3. Last write time


檔案是否有被動過?包含幾種狀況
1. 被修改內容且存檔
2. 檔案被(另外的檔案)覆蓋
3. 檔案被刪除
4. 修改檔名

3跟4是有點像, 4的話原來檔案也等於是刪除,變成新增另外一個檔案的感覺


2016年10月20日 星期四

如何在Visual Studio中使用Boost C++ Library

1. 環境版本,取得Boost
本文使用目前Boost最新版
  • Boost C++ Library 最新版(2016.9) V1.62
               可自行到網站下載: http://www.boost.org/
  • VisualStudio 2010
  • Windows 7
2.  Boost 基本說明


下載後為一個zip壓縮檔,解開後內容如下圖:


資料夾說明如下: (Copy from user manual)
*************************************************
boost_1_62_0\ .................The “boost root directory”
   index.htm .........A copy of www.boost.org starts here
   boost\ .........................All Boost Header files
   lib\ .....................precompiled library binaries
   libs\ ............Tests, .cpps, docs, etc., by library
     index.html ........Library documentation starts here
     algorithm\
     any\
     array\
                     …more libraries…
   status\ .........................Boost-wide test suite
   tools\ ...........Utilities, e.g. Boost.Build, quickbook, bcp
   more\ ..........................Policy documents, etc.
   doc\ ...............A subset of all Boost library docs
*************************************************
Boost Library 有兩種方式給你用
1. 不需要Build:  (Header Only)
     
      大部分Lib只需要include Header就行了, Library code都寫在header
      所以你用了之後跟你的code一起Build就行了, (Templete & inline functions)


2. 要Build:
    一些需要先build, 如下: 跟系統有關的
3.  VS2010 設定, Win32 console program為例
有了上面說明,就可以很容易知道怎麼用Boost,
對於不用build的Lib,只要include header就行了
此處以一個Win32 console program為例,要做的設定基本上只要去專案中
加入boost的路徑就行了:

加入Boost的路徑可能如下,或者看你是放在哪裡?
C:\Program Files\boost\boost_1_62_0

Property\Configuration Property\C/C++\General\Additional Include Directories




4. 簡單範例: 使用boost/array

下面這段code 來測試使用boost, (我隨便寫寫...有compiler過沒問題)
 主要是宣告一個boost int array, 大小10
全部填入3, 然後print出來

**************************************
#include "stdafx.h"
#include <boost/array.hpp>
using namespace boost;

int _tmain(int argc, _TCHAR* argv[])
{
      boost::array<int, 10> a;  
      a.fill( 3);

     for( int i = 0; i < a.size(); i++ )
          printf( " %d \n ", a[i] );

    return 0;
}
*****************************************

這個是Boost中 container 的static array, 用法可參考Boost線上說明
http://www.boost.org/doc/libs/1_62_0/doc/html/array.html

完畢!

2015年9月14日 星期一

在 Windows 7 64 bit 上使用 Sikuli Script

2015/9.15
GUI, 人機介面怎麼測試,發現了好玩的東西~
紀錄一下測試的步驟:
環境: MS Windows 7 64bit


Sikuli (西酷吏, 自己亂翻)
視覺化的程式語法,可以模擬使用者在桌面上用滑鼠跟鍵盤的操作
所以對於我們要用來做測試的話是相當的方便

Step1. 下載軟體 (Windows version):

Java run-time environments:  (必須安裝 Version 6 )
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html#jre-6u30-oth-JPR

沒有Jave 無法正常使用 Sikuli IDE and Setup.

我偏好免安裝版:
https://launchpad.net/sikuli/sikulix/x1.0-rc3/+download/Sikuli-X-1.0rc3%20%28r905%29-win32.zip

安裝包:
https://launchpad.net/sikuli/sikulix/1.0.1/+download/sikuli-setup.jar



Step2. 安裝執行
解壓縮後執行sikuli-setup.jar
啟動IDE: Sikuli-IDE-w.bat (批次檔的內容必須正確指定到JRE6的路徑)
這邊常見的問題是,啟動Sikuli-IDE後要截圖會失敗,我是看這一篇解決問題滴:
https://bugs.launchpad.net/sikuli/+bug/893772



Step3. 開始Program...



官網:
http://www.sikuli.org/




2013年4月2日 星期二

XSD 簡介, a XML Schema (一)

###  This article is reference to : w3schools.com  ###


XML schema 是用來描述XML的內容

目前有兩種方式來描述XML的內容結構:
     1. DTDs
     2. XML schema (xsd)

XML schema 比 DTD 好,因為schema的擴充性高且支援 Data type

以下是一 XML schema (以下簡稱 xsd ) 範例:

a simple XML name: "note.xml"
<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

這個是上面 note.xml 的 xsd 描述
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

1. 由上可知 xsd 本身也是一個 XML, (用一個XML來描述另一個XML的結構)
2. 可以定義XML中有那些 elements
3. 定義 有哪些 attributes
4. 定義 那些 elements 是 child elements
5. 定義 child element 之間的順序關係
6. 定義 element 的內容是否 empty 或有文字(Text)內容
7. 定義 資料型態(data type)
8. 定義 element 或 attributes 的 default value 或 fixed value


下面這個 XML 內容可以 reference "note.xsd" (加入藍色的部分)
<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>


基本 xsd 框架如下:
<?xml version="1.0"?>

<xs:schema>
...
...
</xs:schema>


<名詞解釋>  simple element / complex element

XSD simple element: 表示這個element 的內容頂多只能是文字,不能有其他element ,不能有其他attribute。

不滿足以上條件的都是 complex element

下面這個範例就是 simple element,  其element 的內容頂多是文字
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

下面這個範例,element 有 attribute, 所以他就是 complex type
<lastname lang="EN">Smith</lastname>

如何使用xsd 描述 simple type:
xsd 如下範例:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>


<xs:element name="xxx" type="yyy"/>

xxx is name of element
yyy is data type of the element


xsd 有許多內建的 data type, 下面是依些常見的
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

前面有提到 xsd 還可以定義 element 的 default value 或 fixed value
範例如下:
<xs:element name="color" type="xs:string" default="red"/>

<xs:element name="color" type="xs:string" fixed="red"/>


xsd 如何描述 attribute: 範例如下: (和描述 simple type element 很像)
<xs:attribute name="xxx" type="yyy"/>

<xs:attribute name="lang" type="xs:string" default="EN"/>

<xs:attribute name="lang" type="xs:string" fixed="EN"/>

Attribute對於element 來說,有時候是 optional,有時候是 Must
像上面的範例沒特別說明,表示 optional
若是 must
<xs:attribute name="lang" type="xs:string" use="required"/>


************************************************************

我們也可以對 element 或 attribute 的內容做規範限制 (Restrictions)

下面這個範例 我們對 "age" element 的內容作一些 restrictions
<xs:element name="age">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="120"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

age 的base = integer, 最小值 0, 最大值 120


待續...

2013年3月3日 星期日

HTML表單傳送中文字到 PHP + MySQL 問題

最近在學習PHP + MySQL 資料庫碰到以下問題:

用表單傳送中文字到 PHP 網頁中,再將中文字存入MySQL中。

使用phpMyAdmin去看MySQL資料表單,發現文字都無法正確的傳入

中文字的內容都是空的。若改用英文字都沒有這些問題。

初學這些東西,HTML的表單不熟,PHP也不熟,MySQL也不熟,所以這問題還真麻煩。

只好一步一步Debug.

英文字可以傳送,表示整個傳送的機制是對的,但就中文字不行,表示傳中文字時的編碼

可能有問題。這個時候就會想問幾個問題。

   1. 表單是怎麼傳送文字? 機制是如何?編碼方式?
   2. Php在Server端怎麼收到這些文字? 是否有正確收到
   3. Php怎麼把文字寫入資料庫? database 的編碼方式?

把問題列出來後,就開始Google 找答案了:

1. 表單是怎麼傳送文字?

    表單傳送有分 Post 和 Get, 可以用Get method來實驗,因為
Get 方式會將傳送資料顯示網址上,如此我們可知道表單傳了時麼東西出去。
由實驗得知,若表單文字是英文就直接送出,若是中文字會經過編碼再送出。

寫個簡單的表單如下:
<form action="test.php" method="get" >
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" >
      
</form>

分別送出 "English" 和 "中文" ,送出後得到網址分別如下:

http://127.0.0.1/test2.php?foodName=English&cost=222

http://127.0.0.1/test2.php?foodName=%A4%A4%A4%E5&cost=222

發現上面 "中文" 被編碼成 %A4%A4%A4%E5

修改送出編碼方式如下: (改成utf-8)
<form action="test.php" method="get" accept-charset="utf-8">
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" > 
</form>

http://127.0.0.1/test.php?foodName=%E4%B8%AD%E6%96%87&cost=222
發現上面 "中文" 被編碼成 %E4%B8%AD%E6%96%87
有明確指定編碼方式,永遠都是比較好的做法。


2. PHP 收到甚麼?

PHP 的資料型態是不需要很嚴謹的定義的,不像C語言有很嚴謹的資料型別定義。
當然這樣各種作法有好有壞拉(本人比較喜歡定義)。上面表單傳過來的東西 PHP
到底會收到甚麼?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];     
echo gettype($food) . "<br>";   // $food 讀取其資料型態
echo gettype($cost) . "<br>";   // $cost 讀取其資料型態

使用 gettype() 讀取$food 和 $cost資料型態,可知不管你傳文字還是數字,資料型態都會自動變成string.
由此可知,假設我只單純的把自echo出來,那echo出來的這個網頁所使用的編碼方式
就很重要了,那依舊是必須要能夠匹配的編碼方式才行囉!

<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title></title>
</head>

所以如果送過來的是採用 UTF-8的編碼方式,這邊網頁就必須採用UTF-8的方式(如上例)
依此類推,big5...都一樣

3. Php怎麼把文字寫入資料庫? database 的編碼方式?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];  

$sqlCmd = "insert into menu 
 ( `index`, `foodName`, `cost` ) 
values 
 ( NULL, '{$food} ', {$cost} )";

上面這個PHP code 是把資料寫入資料庫中的語法,基本上沒有甚麼編碼方式的問題
只要網頁的編碼方式正確(第二點)就沒問題了。

但是資料庫的編碼方式就必須注意了。下圖採用phpMyAdmin連線進去我的編碼方式
也是採用utf8


以上這樣應該就都OK了。

我一開始會出現問題是因為
1. 我的表單傳送時並沒有指定編碼方式 (變成default)
2. 我的接收php網頁的編碼方式適用big5

所以中文字就一直有問題。但經過以上的方西調整後,目前都沒問題了。



2013年3月2日 星期六

Windows 7 遠端桌面關機 - 關閉遠端電腦

Windows 7 使用遠端桌面登入到遠端電腦,
使用完畢想要順手把遠端電腦也給關機怎麼做呢?

Solution:

Ctrl + ALT + END ( = 對遠端電腦下達 Ctrl+alt+del  )
此時螢幕右下角有個電源鈕,按下後遠端電腦就會進行關機動作,
此時遠端連線也會中斷 (廢話,都關機了...)

Solution 2:  (這個方法比較簡單)
Alt + F4
此時跳出選單,選擇關機


2013年2月28日 星期四

MySQL 基礎

MySQL 是一種資料庫伺服器(Database server),
由於Open source,所以目前相當多人在使用。

本篇將學習做個紀錄。
MySQL 的官網:  http://www.mysql.com/

主要操作的方式可以用如操作DOS的方式。
做為網站的資料庫,可以使用phpMyAdmin管理來操作MySQL
phpMyAdmin 是需要另外安裝的,也是free的軟體

phpMyAdmin 的官網:  http://www.phpmyadmin.net/home_page/index.php

以下使用phpMyAdmin 操作MySQL:

1. 登入MySQL:

    輸入下列網址,即登入本機的MySQL
    http://127.0.0.1/phpMyAdmin/
    一開始用root帳號燈入 => root / password


2. 修改登入位置限制:  打開 config.inc.php 尋找下列設定:
    $cfg['PmaAbsoluteUri'] = ' ';
    改成如下:

   $cfg['PmaAbsoluteUri'] = 'http://127.0.0.1/phpMyAdmin/';

   意思是說只有本機能夠使用phpMyAdmin。
   如此可以防止外面有人試圖登入以增加安全性。

3. 如何修改 root 密碼?
   首頁\ Privileges\Change password.
   點選最右邊的編輯,進入==>Change password.
   Host 要選Localhost的那個選項,若選127.0.0.1似乎無法變更密碼。




4. 開設新資料庫

    首頁: Create new database
 
    下圖建立了一個叫MyTest的database. 然後click Create button.



5.開設新帳號
  由於Root的權限太大,一般會開設一個帳號來管理某個資料庫。
  以免用root把資料庫給毀了

  首頁\ Privileges\Add a new User

  進入後畫面如下,填寫相關資料後建立(Go), 此例建立了一個 "John" 的 user.


6. 在資料庫中新增 Table


2013年2月27日 星期三

Windows 7 遠端桌面全螢幕退出切換

最近使用Windows 7 的遠端桌面,當遠端桌面全螢幕時,不知道該怎麼退出全螢幕。

記得以前使用Windows XP時,只要滑鼠靠近螢幕上緣就會有Tab跑出來讓你操作,

甚至可以將Tab釘住。 現在使用 Windows 7 竟然沒有這個功能了,哀!  

Solution:

所以如果要切換全螢幕設定,網路上找到的答案是,使用快速鍵( Ctrl + Alt + Break )來切換



2013年2月24日 星期日

甚麼是CSS ? (Cascading Style Sheets)

1. CSS 是甚麼?
    CSS 是一種語法規則(syntax),用來定義網頁內容呈現的樣式,效果。 
    比如說,可以定義字形的字體,位置,大小,顏色。圖片的位置,大小等等。

2. CSS 寫在哪?
    A. CSS當然是寫在HTML中的,因為他要用來描述HTML內容呈現嘛!
    B. 也可以另外單獨寫在CSS file中,HTML在引入CSS file到HTML中。
        其好處可以多個HTML共用,容易維護。

3. CSS 的由來?
    主要是W3C組織定的,要讓樣式設計獨立出來,以免HTML, XML越來越複雜
    瀏覽器 IE 5.0以後的版本大概都已經完整支援CSS語法


很不錯的CSS 教學網站:
Reference:

2013年2月22日 星期五

如何解除VC的 C4996 warning

Visual studio 6 版以後的Compler 對於一些C 函式庫做安全改良(security enhancements),

如:
strcpy()  改良成 strcpy_s()

當你使用 strcyp(), 會產生下列 warning... (很煩...)

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

消除的方法是:
  1.  加入define 
 
#define _CRT_SECURE_NO_WARNINGS

  若放在程式碼中,要注意放的位置,要放在所有include header之前。
 
  最簡單的方式是放置在preprocessor中( solution exploer右鍵/properies/ C/C++ / preprocessor )
  或是放在 stdafx.h中(if you have)。

2. 加入 編譯指令
 
#pragma warning( disable:4996 )
 
把上述指令放在 .C/.CPP 檔中,呼叫函示之前即可


Apendix:
微軟對於 eliminate deprecation warnings for the older, less secure functions 說明:
http://msdn.microsoft.com/zh-tw/library/8ef0s5kh.aspx

相關secure enhance function 說明:
http://msdn.microsoft.com/en-us/library/wd3wzwts(VS.80).aspx

2013年2月17日 星期日

在windows上架設php網站(php+Apache+MySQL)

本篇文章告訴你如何從無到有架設一個Windows based 的PHP網站
內容大概分兩部分

   1. 安裝PHP 網站相關軟體
   2. 寫一個簡單的PHP互動網頁

*****************************************************************************
Part 1. Install software

當然你可以分別下載php, Apache, MySQL 然後分別安裝
不過最快的做法是使用快速架站包==>AppServ (已經幫你整理好)

   官網: http://www.appservnetwork.com/
   
    AppServ 2.5.10 download: 
    http://prdownloads.sourceforge.net/appserv/appserv-win32-2.5.10.exe?download


下載後直接執行安裝檔,按照其安裝步驟安裝即可(採用其default安裝即可)。

如果你依照步驟安裝,Apache server 應該已經啟動了,
你可以打開瀏覽器測試一下: 測試下面三個網頁。

1. 網址輸入: http://127.0.0.1/
看到如下網頁: 表示 Appache 啟動成功


預設的網頁


輸入 http://127.0.0.1/phpMyAdmin

   帳號: root
   密碼: ****** (剛剛安裝時你key的密碼)

看到如下網頁:

phpMyAdmin 資料庫default page


輸入:
http://127.0.0.1/phpinfo.php
看到如下網頁:


PHP 版本資訊


看到以上三個網頁,表示基本的安裝都已經完成~


*****************************************************************************
part 2 Create your own interactive web page.


安裝後,首頁被放在 AppSeve\www\index.php
你可以隨便寫一個HTML,名子替換成 index.html (首頁)
首頁就被換成新的了




將下列語法另存到 "index.php",置換到www資料夾中


<html>
<head>
<title>Hello world</title>
</head>
<body>
<br>
<?php
echo "hello world <br>";
$a = $_REQUEST['aa'];
$b = $_REQUEST['bb'];
$a = $a + $b;
echo "The result is:{$a}<br>";
?>
<br>
<br>
</body>
</html>

上面PHP程式宣告了兩個變數 "aa" 和 "bb"
 計算 aa + bb 並將結果顯示在網頁上



用你的瀏覽器輸入下列網址:
http://127.0.0.1/index.php?aa=2&bb=3
參數放在網址後面
aa = 2
bb = 3



網頁顯示計算結果 aa + bb = 5


以上就是一個最簡單的PHP程式範例

*******************************************************
幾個好用工具:

1. Free PHP editor: PSPad
http://www.pspad.com/

2. HTML editor: kompozer
http://kompozer.net/download.php


什麼是PHP?

PHP 是:
  A. 一種 script language
  B. 放在網頁上的程式語言
  C. 嵌入在HTML中
  D. 程式放在Server端,非Client端
  E. Personal Home Page Tools (由Rasmus Lerdorf 先生提出)
  F. Open source.
  G. 通常搭配 Apache (server) + MySQL(database)
  H. 跟ASP是同一類的東西,ASP應該算是PHP的競爭對手。
       (甚麼!!不知道ASP...請自去股溝吧~)

PHP 官方網址: http://php.net/

PHP 可以做甚麼:
  A. 網路留言板,
  B. 網路聊天室
  C. 訂票系統
  D. 訂位系統
  E. 其他...(電子商務)

PHP 的工作原理:
  簡單的說,PHP是run在server端的一支程式(php解譯器),
  當Client端(上網瀏覽網頁的你)來訪問時,網站伺服器(Apache)
  會將php網頁丟給php解譯執行,php解譯器會根據進來的命令
  做出回應,通常是output一個HTML網頁出去,回丟給server(Apache)
 ,server再回應給client端,因此可產生互動網頁。
  php解譯器可以在server上做很多事,比如說到SOL資料庫中撈資料等..
  就看你程式怎麼寫。因此要做到電子商務系統都是沒問題的。

2013年2月2日 星期六

如何開始 Keil C 專案, 使用YQ518-8051實驗板

如提,紀錄如何用Keil C起始一個8051專案。

 Keil C 官網: http://www.keil.com/c51/

使用的開發版是 YQ518, 淘寶網可購買。

內容: 請按我

2013年1月31日 星期四

MFC List Control 的使用

Using  MS. VS2010
This artical will show you step by step who to make a 2x2 list view on you MFC application.
The result like following fig:

Step1. From toolbox. select "List control" icon.
 

Step2.  Modify the property of List control
  in "Properties" page, Set "view" = Report
you will see below:
Step3. Add list control variable: Right click on control.
 
Step4. Write you own code for application


// Column Name index
#define COLUMN_NAME      (0)
#define COLUMN_VALUE     (1)

// Row index
#define ITEM_NetxFlag    (0)
#define ITEM_HostFlag    (1)
#define ITEM_HostCOSFlag (2)
#define ITEM_DevCOSFlag  (3)
#define MAX_ROW_INDEX    (4)

// Row Name array
const char ROW_NAME[MAX_ROW_INDEX][16] =
{
  "NetxFlag",
  "HostFlag",
  "HostCOSFlag",
  "DevCOSFlag"
};

// Initial list table.
this->m_infoList.InsertColumn( COLUMN_NAME,  "Name",  0, 80, 50 );
this->m_infoList.InsertColumn( COLUMN_VALUE, "Value", 0, 80, 50 );

for( int i = 0; i < MAX_ROW_INDEX; i++ )
{
  this->m_infoList.InsertItem(  i, ROW_NAME[i]   );     // Set List name.
  this->m_infoList.SetItemText( i, COLUMN_VALUE, "0" );  // Set List value.
}

如何將程式碼貼在Blogger上

如何將程式碼貼在Blogger上:

範例如下:  可惜沒有Keyword顏色區別。 
void main()
{
  printf( "hello world \n" ); 
}



Step1:  前往下列網址,貼上程式碼。

http://formatmysourcecode.blogspot.tw/


Fig. 1



















Step2:  Copy 上述網址中產生的HTML語法, 回貼部落格文章中即可

Fig2