2018年4月26日 星期四

Smartmon -- 補充說明文件

Advanced Technology Attachment,簡稱「ATA
與由整合驅動電子裝置(英語:Integrated Drive Electronics,簡稱IDE)技術實現的磁碟機關係最密切。

IDE是一種電腦系統介面,主要用於硬碟CD-ROM,本意為「把控制器與盤體整合在一起的硬碟」。數年以前PC主機使用的硬碟,大多數都是IDE相容的,只需用一根電纜將它們與主機板或介面卡連起來就可以了,而目前主要介面為SATA介面。而在SATA技術日益發展下,沒有ATA的主機板已經出現,而且Intel在新型的晶片組中已經不預設支援ATA介面,主機版廠商需要另加晶片去對ATA作出支援(通常是為了相容舊有硬碟和光碟機)。
SATA(Serial ATA)於2002年推出後,原有的ATA改名PATA並列高技術配置Parallel ATA)。[1] 2013年12月29日,威騰電子正式停止PATA硬碟供應,而希捷科技則已停售產多年,這意味著1986年設計的PATA介面在經歷27年後正式退出歷史舞台。
簡介

一般說來,ATA是一個控制器技術,而IDE是一個符合它的磁碟機技術,但是兩個術語經常可以互用。ATA是一個花費低而效能適中的介面,主要是針對桌上型電腦而設計的,銷售的大多數ATA控制器和IDE磁碟都是更高版本的,稱為ATA - 2和ATA - 3,與之符合的磁碟機稱為增強的IDE。
把盤體與控制器整合在一起的做法,減少了硬碟介面的電纜數目與長度,資料傳輸的可靠性得到了增強,硬碟製造起來變得更容易,因為廠商不需要再擔心自己的硬碟是否與其他廠商生產的控制器相容,對用戶而言,硬碟安裝起來也更為方便。
ATA是用傳統的40-pin並列資料線連接主機板與硬碟的,外部介面速度最大為133MB/s,因為並列線的抗干擾性太差,且排線佔空間,不利電腦散熱,而逐漸被SATA所取代。ATA或SATA主機控制器晶片差不多整合到每一個生產的系統板,提供連線最少4個裝置的能力。ATA或SATA控制器已經變得非常廉價和常見,致使購買一塊沒有ATA或SATA介面的PC主機板是很難的。


小型電腦系統介面(SCSI,Small Computer System Interface)是一種用於電腦及其週邊裝置之間(硬碟軟碟機光碟機印表機掃描器等)系統級介面的獨立處理器標準。SCSI標準定義命令、通訊協定以及實體的電氣特性(換成OSI的說法,就是佔據實體層、連結層、通訊層、應用層),最大部份的應用是在儲存裝置上(例如硬碟、磁帶機);但,其實SCSI可以連接的裝置包括有掃描器、光學裝置(像CDDVD)、印表機……等等,SCSI命令中有條列出支援的裝置SCSI週邊裝置。理論上,SCSI不可能連接所有的裝置,所以有「1Fh - unknown or no device type」這個參數存在。

排列組合(permutation)

#include<stdio.h>
#include<string.h>
 
void swap( char *a, char *b )
{ //外部函式,互換元素資料
   char c;
   c=*a;
   *a=*b;
   *b=c;
}
//外部函式,印出所有元素排列
void fun( int a, int b, char element[] )
{
   int k;
   if ( b == 1 )//長度為一時,直接列印。
   {
      printf( "%c\n", element[ a ] );
   }
   else if ( b == 2 )
   {

      // 長度為二時 ,
      // 把之前遞迴的的元素列出,
      // 之後互換末兩位元素
      for ( k = 0; k < a; k++ ) {
         printf( "%c", element[ k ] );

printf( "%c%c\n", element[ a ], element[ a + 1 ]);
   
      for ( k = 0 ; k < a; k++ ) {
         printf( "%c", element[ k ] );

printf( "%c%c\n", element[ a + 1 ], element[ a ]);
   
   }
   else
   { //當長度大於3時利用下列遞迴
      for ( k = 0 ; k < b; k++)
      {
         //用swap使所有元素都能列於相對的第一位置上
         swap( &element[ a ], &element[ a + k ] );
         //printf( "a = %7d b=%7d\n", a, b );
fun( a + 1, b - 1, element ); // 之後慢慢遞迴,使之成為simple case
//printf( "a = %7d b=%7d\n", a, b );
         swap( &element[ a ], &element[ a + k ] ); // 然後再換回來

      }
   }
}


int main( void )
{
   char element[ 11 ]; //宣告變數element
   int len; //宣告變數len
 
printf("請給定元素,至多10個>");
   scanf( "%s", element );// 把使用者給的值存回element
   len = strlen( element );// 查定element的長度
   //printf( " len = %d ", len );
fun( 0, len, element);// 外部函數作用開始
   return(0);
}
參考於:網站
------------------------------------------------------------------------------------------------------------------------
版本2:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void swap(int *a, int *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}

void fac(int data[], int num, int idx)
{
//int *tmp_data, i;
int i;
// Print all element because we get one of result
if(idx == (num)){
int j = 0;
for(; j < num; ++j) {
printf("%d ", data[j]);
}

printf("\n");

return;
}

fac(data, num, idx + 1);
// Other results
i = idx + 1;
for(; i < num; ++i) {
//printf("fuck\n");
swap(&data[idx], &data[i]);
fac(data, num, idx + 1);
swap(&data[idx], &data[i]);
}

//free(tmp_data);
}

int main()
{
int data[] = {1, 2, 3, 4};
//int a = 9;
//swap(&a, &a);
int num = sizeof(data) / sizeof(int);
fac(data, num, 0);
//printf("%d, %d", a, a);
return 0;
}





KVM hyperthreading

超執行緒HTHyper-Threading)

在一個實體CPU中,提供兩個邏輯執行緒。超執行緒的未來發展,是提升處理器的邏輯執行緒。

運作方式



  1. 每個單位時間內,一個單執行管線的CPU只能處理一個執行緒作業系統:thread),以這樣的單位進行,如果想要在一單位時間內處理超過一個執行緒是不可能的,除非是有兩個CPU的實體單元。
  2. 雙核心技術是將兩個一樣的CPU放置於一個封裝內(或直接將兩個CPU做成一個晶片),而英特爾的HT技術是在CPU內部僅複製必要的資源、讓兩個執行緒可同時執行在一單位時間內處理兩個執行緒的工作,模擬實體雙核心、雙執行緒運作

(網站)
您需要很多cpu的虛擬或真實,那麼請使用超線程技術。 大多數應用程序都是smp aware和HTaware。 你不會真的有一個8核心,但對於大多數smp知道的應用程序它應該有所幫助。 許多應用程序仍然只適用於幾個核心。 我從來沒有關閉我的用途。

這取決於工作量。 一般來說,當你有IO限制負載和/或嚴重擁塞的CPU( IO bound loads and/or heavily congested CPU)時,HT會有所幫助。 如果您沒有過度使用CPU並且沒有磁盤/網絡瓶頸(disk/network bottlenecks),那麼HT可能無法提供任何優勢,並且在某些情況下甚至可能會妨礙性能

(網站)

vcpu的數量小於實際CPU的數量,是為了讓vcpu有更好的排程,以免增加爭用資源的機會(倒置性能下降)

HT 超執行緒, 主要是希望能利用 處理器中閒置的資源, 
比方說一個四則運算, 當處理器在做小數與乘除運算時, 會利用浮點運算器, 整數運算會閒置
HT 就是希望能在這個時候將能充分利用整數運算器


2018年4月19日 星期四

pyinstaller

實作於ubuntu 16.04.01
需安裝以下套件:
                                 sudo apt-get install python-pip #python pip 功能
                                 sudo pip install --upgrade pip  #更新pip

安裝pyinstaller:
                pip install pyinstaller

一般產生:

# 最簡單的方式,會產生 .spec, build dir以及dist
# 這樣會將結果以資料夾的方式,放在dist裡面
pyinstaller file.py

# 產生單一執行檔
pyinstaller -F file.py

    #  如此一來dist中的檔案會直接得到執行檔,而不是動態資料料庫『.so』檔


編譯所產生檔案位於原始目錄,將可執行檔匯出於指定目錄
                  
將app加入到指定路徑:
                                         pyinstaller -F file.py --distpath  yourpath
    #  該方法會將原本dist(可執行檔目錄)的『執行檔』直接存在yourpath(指定目錄中)

將所產生之暫存檔放入指定目錄( 預設為當前目錄,路徑更改後其原始名稱更改與檔名相同,例:遠使名稱為build而檔名為hello.py,指定過後build檔名會更改為hello)

添加暫存產生路徑:
                                    pyinstaller -F file.py --dispath yourpath --workpath yourworkpath

將所產生之編譯檔『.spec』放入指定目錄

添加.spec產生路徑:
             
pyinstaller -F file.py --dispath yourpath --workpath WORKPATH --specpath SPECPATH

  # 條件可單獨                                   


x Window - base






X Window system 是個利用『網路架構的圖形使用者介面軟體』

基本分成兩種元件

  • X Server :管理硬體
                              X Server 的重點就是在管理用戶端的硬體,包括接受鍵盤/滑鼠等設備的輸                                  入資訊並且將圖形繪製到螢幕上 (請注意上圖的所有元件之間的箭頭指                                    示)
                              要功能就是在管理『主機』上面的顯示硬體與驅動程式
  • X Client :管理應用程式
                              告知 X Server 要繪製東西。


X Window System 的架構
                        取自:鳥哥

運作原理:X Client 應用程式會將所想要呈現的畫面告知 X Server ,最終由 X server 來將結果透過他所管理的硬體繪製出來





















#僅供自行參考

2018年4月13日 星期五

4/13weekSchedule

重導向

shell 特殊變量Shell $0, $#, $*, $@, $?, $$
   grep
      -a
      -ir 'filestring' path //找程式碼
   awk
   sed
   pipe( | )
   column -t
   正規表示式
   for all intf; do

   done

查縮寫somthing + abbr

FSM

fopen
fclose
stdin
stdout
stderr
dup
dup2

*** X window

blocking - non-blocking

80 20 法則

chmod u+x               2 1 0
u user                  2 2 2 轉制
o other                ___________
g group                 4 2 1        4 = 100   2 = 010   1 = 001
                        
                        1 0 0
                        0 1 0
                        0 0 1    (+
                       ____________
                        1 1 1    7(D)
                        r w x

vitualBox
   import
   export
   clone
   snapashot
   start
   stop
   list
   網路位置
      nat bride

md5

W7 account :U1 pwd 1

getopt

   short option
   long  option
   Positional Paramerters

browser render渲染
smarty
systemd
linux signal
Ajax
讀寫LOCK
json, xml
bootstrap
PHP
   construtor destructor
http  cookie session
JS 
   VAR
   匿名函數 
jQuery

git sub module

linux 
   /proc - kernel與usespace 之間的溝通
   /sys

log 
   /var/log/storge
               /cluster 
               /vdesk
iframe
callback
daemons
/etc/network/if-up.d
php shell-exec

thread-safe VS reentrant

string concatenation  == strcat
cd /etc/apt/
shc encrypt

2018年4月12日 星期四

PHP Array()

用途 :
           1)可以把 Array 當成一個用來儲存多數値的一個變數(其本身亦屬於函數)
         
            2)當作單純的數個値,也可利用Key和Value


MVC架構

介紹

MVC 一種軟體架構模式,把系統分成三個種核心,分別為:Model, View, Controller。
主要將網頁分成邏輯處理(物件操作)、視覺呈現與路由控制(發送、接收請求),各種元件
處理不同的工作,強調職責分離
,開發與維護人員可以更快速對於目的與問題,找到該
處理的程式,讓程式的修改與功能擴充簡化,提高程式可用性。
        View :
                   畫面,顯示的邏輯
                    
                  Feature :
                                 呈現 
        controller :
                          處理回應,與使用者的互動
                          控制城市的流程
                          
                          Feature : 
                                         盡量輕量,這裡盡量不撰寫邏輯與物件,而以路由以傳遞資料為主。
        Mode1 :
                    資料傳輸物件
                    實作商業邏輯
                    資料庫進行操作
                    
                    Feature : 
                                   包含所有的邏輯、物件,內容豐富。                  
 Advantage
        -使程式結構更加直覺
        -增加程式可用性
        -程式方便管理
        -程式擴充性高
        -有例於團隊開發

Shortcomings
        -不適用於小型專案
       -管理文件增加
       -嚴謹的系統架構與規劃
       -需要重覆的測試

        
#僅供本人參閱
Reference : https://dotblogs.com.tw/dog0416/2016/05/20/131644

VitualBox clone功能

Usage : VBoxManage clonehd <old> <new> --format VDI

<old> and <new> 為disk名稱. 

--format VDI告訴我們我們想要我們的DISK格式。 像QEMU一樣,VirtualBox能夠使用不同的虛擬硬盤格式,這使得它與市場上的其他虛擬化產品兼容。

VBoxManage clonevm          <uuid|vmname>
                            [--snapshot <uuid>|<name>]
                            [--mode machine|machineandchildren|all]
                            [--options link|keepallmacs|keepnatmacs|
                                       keepdisknames]
                            [--name <name>]
                            [--groups <group>, ...]
                            [--basefolder <basefolder>]
                            [--uuid <uuid>]
                            [--register]

Full clone 與 Linked clone差異

      Full clone :
                         Full clone是虛擬機獨立複製出一份,與原虛擬機不分享任何內容。 一個Full                               clone的運行是與原虛擬機完全分離。

      The Linked Clone :
                         Linked Clone是與原虛擬機共享虛擬disk的虛擬機的副本。 這節省了磁盤空                                 間,並允許多個虛擬機使用相同的軟體安裝。



#僅供本人參閱



2018年4月11日 星期三

VirtualBox 快照及還原

快照功能應用說明
       當要儲存現有環境狀態(以防測試環境崩潰),使用『快照(snapshot)』將回復到系統快照時的狀態

       使用方法:
                          啟動虛擬機時,虛擬機視窗上按下『機器>拍下系統快照(S)』,隨後輸入此次                            快照名稱,點選確定即可。

                          還可以使用在虛擬機未啟動時,使用『設定值』中『快照的功能』畫面新增
                       
                          註:
                                  必須讓滑鼠停在『目前狀態』才能拍新的快照
 
回復到快照系統狀態

        使用方法:
                           停止虛擬機的狀態下,點選『設定值』中『快照』,選擇要回復的快照,
                           再使用→鍵點選Restore Snapshot

#僅供本人參閱

Linux shell -- getopt


while getopts “a:b:c:?” argv # while等待使用者輸入getopts所設定的參數
do case $argv in # case來依據使用者所輸入的值來決定下一步的動作 a) VAR1=$OPTARG ;; # break之意
b) VAR2=$OPTARG ;; c) VAR3=$OPTARG ;; ?) # 無需變數帶入 usage exit ;; esac #結束時『case』字母倒過來 done

echo "$VAR1" "$VAR2" "$VAR3" 測試值是否被帶入

Input :
./filename -a 10 -b 20 -c 30

Output:
10 20 30


getopts的用法是使用一個字串(由引號"..."刮起來)來代表會用到的參數旗標,而冒號?:代表的是該旗標是帶有參數值的。像這個例子中”a:b:c:?”這個字串,代表有a, b, c這三個參數都需要帶有輸入的值,?則不需要帶值。所以接下來的case命令就可以用來處理使用者的輸入,當旗標a, b, c被引用時,他後面所接的參數值就會在case命令中透過變數$OPTARG指定給相對應的變數VAR1, VAR2, VAR3,以進行後續動作。而如果引用?,則直接執行usage函數後即離開exit**。

執行程式是要引用參數旗標的方式是減號加上旗標,後面再跟著參數值,也就是Linux慣用的命令輸入方式: script -option value

取自:https://ithelp.ithome.com.tw/articles/10105866



請勿轉載,本人個人學習用途之整理