2016年12月2日 星期五

音源端子


類比音源端子
1. trs端子,有 2.5mm, 3.5mm, 4.4mm & 6.3mm
2. RCA,(線徑粗,端子咬合度高,可多樣化,)
3. BNC,遠距離傳輸

數位音源端子
1. coaxial同軸端子.
2. optical光纖端子
3. HDMI

無線音源傳輸
1. 紅外線
2. RF
3. Bluetooth
4. wi-fi

2016年11月8日 星期二

檔案系統(File System)

Windows:
FAT16 :支持最大分區2GB,最大文件2GB
FAT32 (File Allocation Table): 支持最大分區2TB,最大文件4GB
NTFS (New Technology File System) :支持最大分區2TB,最大文件2TB
exFAT(Extended FAT) : 對於單檔超過4 GB的跨系統(windows,mac,linux)使用者來說,可用exFAT
 
Linux: 
history: 1991minix,1992ext,1993ext2,2001ext3,2008ext4,2010btrfs
ext4:  使用了B+樹索引數據extent的文件系統(有別於EXT2/EXT3),支持最大分區1EB,最大文件16TB
btrfs: Linux檔案系統。支援快照(File System Snapshots),將檔案系統照相。現代人常用的危機處理方法。

Mac OS X的檔案系統是HFS+。

XFS 是非常穩固,並擁有高度擴充性的單主機 64 位元日誌檔案系統。可以支持9E(2的63次方)的分區。

磁碟空間的浪費
FAT32:隨著大容量硬盤的出現,從Windows 98開始,FAT32開始流行。它是FAT16的增強版本,可以支持大到2TB(2048G)的分區。 FAT32使用的簇比FAT16小,從而有效地節約了硬盤空間。
NTFS:微軟Windows NT內核的系列操作系統支持的、一個特別為網絡和磁盤配額、文件加密等管理安全特性設計的磁盤格式。隨著以NT為內核的Windows 2000/ XP的普及,很多個人用戶開始用到了NTFS。 NTFS也是以簇為單位來存儲數據文件,但NTFS中簇的大小並不依賴於磁盤或分區的大小。簇尺寸的縮小不但降低了磁盤空間的浪費,還減少了產生磁盤碎片的可能。 NTFS支持文件加密管理功能,可為用戶提供更高層次的安全保證。

為什麼要分區?
擁有不同分區的一個主要目的就是為了在災難發生時能獲得更好的數據安全性。

日誌檔案系統(Journaling file system) 
一種檔案系統,指在檔案系統發生變化時,先把相關的資訊寫入一個被稱為記錄檔的區域,然後再把變化寫入主檔案系統的檔案系統。在檔案系統發生故障(如內核崩潰或突然停電)時,記錄檔檔案系統更容易保持一致性,並且可以較快取消復原。

常見的日誌檔案系統
JFS:IBM的 Journaled File System, 最早的記錄檔檔案系統
Ext4/Ext3檔案系統:Ext2檔案系統演化而成的記錄檔檔案系統,廣泛用於Linux系統
ReiserFS:用B+樹作為資料結構的記錄檔檔案系統,在處理小檔案時有較好的效能
Btrfs:用B樹作為資料結構,被認為是下一代Linux檔案系統
NTFS:微軟的NTFS也是記錄檔檔案系統,也是Windows NT下最常用的檔案系統
HFS+:蘋果公司發展的OS X作業系統下主要使用的檔案系統

快照(File System Snapshots)
將檔案系統照相。現代人常用的危機處理方法。

磁簇(叢集cluster)
放data的地方,放data的方法有點類似會場帶位置,人進進出出,如何分配,一家人沒坐在一起,如何記錄。

2016年11月7日 星期一

‍資料庫的使用者與權限

檢視使用者
select user,host from mysql.user;

新增使用者
create user 'username'@'host' identified by 'password';
#host can be: localhost, 192.168.1.%, %

修改使用者密碼:
set password for 'user'@'host' = password('password');

 刪除使用者
1. drop user 'username'@'host';
2. delete from mysql.user where user='user' and host='host';

檢視grant權限
show grants for 'username'@'host';

grant權限
概念:
1. 使用指令的權限,使用者對所有資料庫使用指令的權限。
grant select on *.* to 'user'@'host';
資料指令權限有select,insert,update,delete,file
結構指令權限create,alter,index,drop,create temporary tables,show view,create routine,alter routine,excute,create view,event,trigger
系統管理指令權限 grant,super,process,reload,shut down,show database,lock tables,create user
2. 對資料庫的權限,可以專為單一資料庫開放所有權限,但其他資料庫只有select的權限。
ex, grant privileges on *.* to 'username'@'host';
(privileges: all privileges, select,insert,update.........)
(*.* : database.*)
ex, grant all privileges on database.* to 'user'@'host';

給與grant權限 
grant privileges on *.* to 'username'@'host' with grant option; 

取消權限
revoke all privileges on *.* from 'username'@'host';
revoke grant option on *.* from 'username'@'host';

2016年10月27日 星期四

php mysqli_fetch_array() 一維陣列

mysqli_fetch_array() 反回的是一維陣列

1. 用print_r或var_dump檢查$row得到的是一維陣列(第一筆資料)
#!/usr/bin/php
<?php
$user='username';
$passwd='password';
$host='host';
$dbname='dbname';
$conn=mysqli_connect($host, $user, $passwd, $dbname);
$sql="select * from tablename";
$result=mysqli_query($conn,$sql);

$row=mysqli_fetch_array($result);
print_r($row);
?>

用print_r或var_dump檢查$row得到的是一維陣列(第一筆資料)

array
(
   [0] => value of field0
   [field0] => value of field0
   [1] => value of field1
   [field1] => value of field1
)

2.若要取出所有資料放入二維陣列
while($row = mysqli_fetch_array($result)) {
$data[] = $row;
}



3. 一般來說列印資料庫資料只需如下:
while($row = mysqli_fetch_array($result))
{
echo $row[0].",".$row[1]."\n";

}

4. 如果要取出所有資料庫資料放入二維陣列,再列印如下:
#!/usr/bin/php
<?php
$user='username';
$passwd='password';
$host='host';
$dbname='dbname';
$conn=mysqli_connect($host, $user, $passwd, $dbname);
$sql="select * from tablename";
$result=mysqli_query($conn,$sql);
$length = mysqli_num_rows($result);

while($row = mysqli_fetch_array($result))
{
$data[] = $row;
}


for ($i=0;$i<$length;$i++)
{
  for ($j=0;$j<2;$j++) {

  echo $data[$i][$j].",";
  }
  echo "\n";
}

?>








2016年10月22日 星期六

迴圈


1. For 迴圈 
若於程式設計階段已知要執行的次數 則可使用for敘述
for 固定變量,限定數值範圍 (適用數值變量)
for start,end,step start,end,step都必須是數字

#!/bin/bash
for ((i=0; i<10; i++))
do
echo $i;
done

#!/bin/bash
Distro=('openSUSE' 'Red hat' 'Debian' 'Ubuntu' 'Fedora')
for ((i=0;i<${#Distro[@]};i++))
do
  echo "Linux Distro[$i]=>"${Distro[$i]}
done

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
$length = @array;
for ($i=0;$i<$length;$i++)
{
print "$array[$i]\n";
}

 2. While迴圈
若未知執行次數的話 則應使用while或repeat
while迴圈 稱為前測試迴圈
while 限定條件
while(xx) xx可以是任何運算式
也就是說 先測試條件運算式為真時 繼續執行迴圈 也有可能不執行迴圈內容就直接離開

#!/bin/bash
i=0
while [ $i -lt 10 ];
do
   echo $i;
   ((i++))
done

#!/bin/bash
Distro=('openSUSE' 'Red hat' 'Debian' 'Ubuntu' 'Fedora')
i=0
while [ $i -lt ${#Distro[@]} ]
do
  echo "Linux Distro[$i]=>"${Distro[$i]}
  ((i++))
done

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
$length = @array;
$i=0;
while ($i<$length)
{
print "$array[$i]\n";
$i++
}


3. do while迴圈
repeat   稱為後測試迴圈
也就是說 先執行迴圈 待條件運算式為真時再離開迴圈 也就是 迴圈內容至少執行一次


4. foreach迴圈 
foreach提供陣列很便利的輸出方式,
foreach 語法結構說明:
 
  結構一:
         每跑一圈foreach會把陣列($array)的陣列值
        (array value)存放到 $value 中。
 
         foreach ( $array as $value )
                     ... 執行程式碼 ...
  結構二:
        與結構一的意思一樣,但多增加了把陣列的所引
      (array key)'會同時將array key 取出並存放於
       $key 中。
   
       foreach ( $array as $key => $value )
                  ... 執行程式碼 ...

#!/usr/bin/php
<?php
$dataArray=array('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
foreach($dataArray as $daKey => $daValue)
{
 echo "\$dataArray[$daKey]=>".$daValue."\n";
}
?>

#!/usr/bin/perl
@array = ('openSUSE', 'Red hat', 'Debian', 'Ubuntu', 'Fedora');
foreach my $i (@array)
{
  print "$i\n";
}











2016年10月18日 星期二

判斷指令

1. cmd1 ; cmd2
無論對錯2個都執行

2. cmd1 && cmd2
第一的對,第二個執行
第一個錯,第二個跳掉不執行
第一個對,第二個錯。執行第一個

3. cmd1 || cmd2 || cmd3 || cmd4
從第一個開始有對的執行完畢





單引號與雙引號,與跳脫符號

1. 電腦在讀字元時有時當字元看,有時不當字元看
     e.g.:  echo
            echo abc  -> abc
            echo ~ -> /root
            echo '  -> error
            echo "  -> error
            echo !  -> !
            echo @ -> @
            echo * -> /......................

2. 產生2件事:不當字元的字有何意義。如何印出不當字元的字
如何印出不當字元的字: 用跳脫符號 \

e.g. : echo \~ -> ~
       echo \' -> '
       echo \" ->"

跳脫符號加特定字母有特意義。
e.g. : \n   換行


不當字元看的字有何意義
e.g.:  單引號與雙引號

echo '$PATH' -> $PATH (單引號內所有字元當字元

echo ''$PATH" -> /usr/bin:/usr/local/bin(雙引號除了 一些特殊字元,例如$ 、  \,引號內所有字元當字元)

ex: echo '\' -> \
      echo "\" -> error

php e.g.
#!/usr/bin/php
<?php
$color = 'red';
$item = 'hat';
$result = sprintf('I have a %s %s\n', $color,$item);
echo $result;
?>
ans:I have a red hat\n

#!/usr/bin/php
<?php
$color = 'red';
$item = 'hat';
$result = sprintf("I have a %s %s\n", $color,$item);
echo $result;
?>
ans:I have a red hat

最常見的一個例子是C程式語言中,用反斜線字元「\」作為跳脫字元,來表示那些不可打印的ASCII控制符。在URI協定中,跳脫字元是百分號「%」。

2016年10月17日 星期一

家用常識

#延長線買: 防突波(anti-surge)

#水管彎的目的: trap

#套筒,板手  
所謂二分、三分、四分,是指套筒和把手連接處的規格
2/8=1/4= 二分
3/8 = 三分
4/8 = 四分
力矩扳手:
長度X 力
牛頓米

1.和解
2.調解
     勞資糾紛
     房屋修繕
     行車意外
     消費爭議
     醫療糾紛
     合夥糾紛
     財產爭議
    
3.傷害刑法
律師費
  律師函
  存證信函
  訴狀
  談話諮詢費
  外出車馬費
  訴訟委任

2016年10月13日 星期四

檔案系統的掛載與卸載(mount and umount)

檔案系統的掛載與卸載(mount and umount)
因為Linux的檔案系統的階層可以跨越獨立的分割區以及多重的磁碟機,所以有需要在開機的時候自動掛載這些檔案系統。此外,可抽換式磁碟(如抽取式硬碟,光碟等)以及遠端NFS伺服器上的檔案系統,會有經常性的掛載與卸載,因此不會採用開機時自動掛載的方式。開機時掛載有關的所有資訊會被紀錄載/etc/fstab檔案中。當系統開機時,定義於/etc/fstab檔案中的檔案系統將會受到檢查與掛載的處理。當使用者想要掛載可抽換式磁碟時,亦會參考到/etc/fstab中的資訊。

檔案/etc/fstab是一的文字檔,如以下的範例:
/dev/sda1      /                               btrfs            defaults                                       1 1
/dev/sda2      /home                      xfs              defaults                                      1 1
/dev/sda6      /root                        ext4            defaults                                       1 1
/dev/sda3      swap                        swap           pri=42                                          0 0
usbdevfs        /proc/bus/usb     usbdevfs      noauto                                        0 0
/dev/cdrom   /media/cdrom        auto    ro,noauto,user,exec                        0 0
/dev/sdb1      /home/user/usb      vfat     mode=0777,uid=500,gid=100       0 0
//ip/temp       /home/user/temp   cifs      iocharset=utf8,user=user,password=,rw,uid=user,gid=users

/etc/fstab中每一列都有六個欄位,分別是:
1. Device(裝置)
這個欄位用來指定分割區的裝置檔,如/dev/sda1代表第一顆硬碟的第一個主要分割區。

2. Mount Point(掛載點)
這個欄位用來指定檔案系統所要掛載的目錄。如上例/dev/sda1包含root檔案系統,則會被掛載到 / 目錄。/dev/sda2 掛載到/home目錄,代表將第一顆硬碟的第二的主要分割區整個掛到/home底下,於是/home底下的使用者檔案便可共用一整個partition。

3. Filesystem Type(檔案系統類型)
不同的檔案系統具有不同的Filesystem Type。

4. Mount Options(掛載類型)
這個欄位包含一份以逗號隔開的選項清單。一般指定檔案系統是要以唯讀,可讀寫,或預設等等的方式掛上。

5. Dump Frequency(備份頻率)
dump程式(一個標準的unix備份工具)會參考到/etc/fstab中每個檔案系統在這裡的設定,以決定每個檔案系統多久備份一次。設為0則代表不備分。

6. fsck的檢查順序
fsck 是一個unix標準的磁碟檢查及除錯的工具(程式)。開機時亦會執行fsck這個指令來檢查磁碟。當fsck指令的-A參數被指定時,便會參考到/etc/fstab這個檔案,並依照檢查順序欄位的數字大小依序作檢查。這個欄位只能出現0,1,2三個值。
0    表示fsck不檢查
1    先檢查
2    檢查完設為1的檔案系統後在檢查設為2的檔案系統。

掛載與卸載指令 – mount 及 umount
mount    [-option]
mount -o uid=user -o gid=users -o mode=755 -t  vfat   /dev/sdb1  /home/usb
說明:
[-option]
-a        掛載/etc/fstab檔中所列示的所有分割區。但有noauto選項的分割區除外。例如光碟,或其他抽取式磁碟。
-h     顯示輔助說明
-r    將檔案系統掛成read-only(唯讀)
-w        將檔案系統掛成read-write(可讀寫)
-o mount-option 在命令列上指定掛載選項。
-t fstype 指定檔案系統類型。

掛載選項:
以下的選項可以用在mount指令中(上頁褐色部分,使用-o 選項)或/etc/fstab檔案中(第四個選項)。
sync    建立同步I/O,當對資料讀寫時,會同步寫入檔案系統。但因為同步,效率較差。
async    建立非同步I/O,一般使用這個。
auto    使用-a選項時會自動掛載的檔案系統。系統開機時會執行mount –a,也就是說,設定這個選項時,檔案系統便會在開機時被掛載。
noauto    與auto相反。
exec        允許分割區上所包含的程式可以被執行。
noexec    與exec相反
user        允許一般使用者掛載此檔案系統,但不允許一般使用者卸載。
users    允許一般使用者mount及umount此檔案系統。
nouser    一般使用者不可mount及umount此檔案系統。
ro        唯讀,與-r命令列選項相等。
rw        可讀寫,與-w命令列選項相等。
defaults    包含rw,exec,auto,nouser,async等。(用defaults就不用指定一堆)。

檔案系統類型:
以下的檔案系統類型可以用在mount指令中(上頁紅色部分,使用-t 選項)或/etc/fstab檔案中(第三個選項)。Linux包含的檔案系統類型非常之多,以下只列出最常用者:
ext4       標準linux檔案系統
vfat        一般windows的FAT16,FAT32均可在linux系統中指定為vfat檔案系統。
iso9660    光碟
nfs    network file system。遠端檔案系統。
swap    swap(虛擬記憶體)分割區。
cifs
auto


2016年9月29日 星期四

螺釘安卡

鐵釘
用於一般木料之接合,通常使用於室內。

鋼釘
接和水泥牆面或木料與水泥材料,硬度高,不易鏽蝕

銅釘
用於木質飾品之接合固定,價格較低

木螺絲
用於木料或搭配壁虎使用於水泥材料

鐵板牙螺絲
用於固定鐵板材之物件,搭配華司使用可增加鎖固能力

鑽尾螺絲
又稱自攻螺絲,末端鑽尾設計可較輕鬆鑽穿軟金屬材料

安卡壁虎
埋入水泥中搭配螺釘使用,使其膨脹於恐壁,增加牢固

膨脹螺絲
埋入水泥材質中,做螺釘上固定,一般為較大載重使用

華司
搭配羅斯使用,增加鎖固面積,加強鎖固能力





2016年9月27日 星期二

android app 開發安裝

觀念:

1. 安裝JDK
2. 安裝Eclipse或者Android Studio
3. Eclipse or Android Studio 都要安裝Android SDK, Android Studio內建,Eclipse要去抓Android Studio 的 Android SDK

4. 安裝設定模擬器
5. 也可以直接run在手機

2016年9月20日 星期二

路由器

兩片網路卡
最簡單的路由器是一部電腦插兩片網路卡,可以銜接兩個不同網址的網路,隔離兩個網路內部流量與對外流量,不致互相干擾。目前個人電腦 CPU 處理能力快,網路卡也快,IO 處理能力強,1500 byte 的流量大概每秒可以處理 3~40 Mbits,64 byte 處理能力大致會照比例下降。用個人電腦作 router 有些缺點,第一速度不夠快,表現不穩,路由通信協定不足,個人電腦有硬碟,使用一般通用作業系統,故障率比較高,ethernet 之外其它種類界面支援不足。速路由器 CPU 用的不多,大多在介面上直接處理以加快速度。


轉遞網路封包
既然主機想要將資料傳送到不同的網域時得透過路由器的幫忙,所以啦,路由器的主要功能就是:『轉遞網路封包』囉!也就是說,路由器會分析來源端封包的 IP 表頭,在表頭內找出要送達的目標 IP 後,透過路由器本身的路由表 (routing table) 來將這個封包向下一個目標 (next hop) 傳送。這就是路由器的功能。 那麼路由器的功能可以如何達成呢?目前有兩種方法可以達成:

硬體功能:例如 Cisco, TP-Link, D-Link 等公司都有生產硬體路由器, 這些路由器內有嵌入式的作業系統,可以負責不同網域間的封包轉譯與轉遞等功能;

軟體功能:例如 Linux 這個作業系統的核心就有提供封包轉遞的能力。
高階的路由器可以連結不同的硬體設備,並且可以轉譯很多不同的封包格式,通常...價格也不便宜啊! 在這個章節裡面,我們並沒有要探討這麼高階的咚咚,僅討論在乙太網路裡頭最簡單的路由器功能: 連接兩個不同的網域。嘿嘿!這個功能 Linux 個人電腦就可以達成了!那怎麼達成呢?

NAT
瞭解了路由器之後,接下來你可能需要瞭解到什麼是 NAT (Network Address Translation, 網路位址轉譯) 伺服器, NAT 是啥?其實 IP 分享器就是最簡單的 NAT 伺服器啦!嘿嘿,瞭解了嗎?沒錯, NAT 可以達成 IP 分享的功能, 而 NAT 本身就是一個路由器,只是 NAT 比路由器多了一個『 IP 轉換』的功能。怎麼說呢?

一般來說,路由器會有兩個網路介面,透過路由器本身的 IP 轉遞功能讓兩個網域可以互相溝通網路封包。 那如果兩個介面一邊是公共 IP (public IP) 但一邊是私有 IP (private IP) 呢? 由於私有 IP 不能直接與公共 IP 溝通其路由資訊,此時就得要額外的『 IP 轉譯』功能了;

Linux 的 NAT 伺服器可以透過修改封包的 IP 表頭資料之來源或目標 IP ,讓來自私有 IP 的封包可以轉成 NAT 伺服器的公共 IP ,就可以連上 Internet !


路由器與交換機的差別
路由器與交換機的差別,路由器是屬於OSI第三層的產品,交換機是OSI第二層的產品。第二層的產品功能在於,將網路上各個電腦的MAC位址記在MAC位 址表中,當區域網路中的電腦要經過交換機去交換傳遞資料時,就查詢交換機上的MAC位址表中的資訊,將封包傳送給指定的電腦,而不會像第一層的產品(如集 線器)每台在網路中的電腦都發送。而路由器除了有交換機的功能外,更擁有路由表作為傳送封包時的依據,在有多種選擇的路徑中選擇最佳的路徑。此外,並可以 連接兩個以上不同網段的網路,而交換機只能連接兩個。並具有IP分享的功能,如:區分哪些封包是要傳送至WAN。路由表儲存了去往某一網路的最佳路徑,該 路徑的「路由度量值」以及下一跳路由器。參考條目路由獲得這個過程的詳細描述。

L2,L3 ,switch , router & routing table

Layer2:

1. Layer2 用OSI 第二層 MAC address 來交換資訊

2.  當Switch收到一個封包並要轉送時,會先去檢查封包中MAC位址是什麼,並且根據這個位址去查詢CAM表,這個表裡面有MAC位址及出口埠的對應。(CAM: Content Addressable Memory, 用來動態紀錄MAC地址。)

這個CAM表是經由學習得來的。怎麼學習呢?當Switch收到一個封包時,便會去查詢CAM表,如果沒有找到相關的資訊,為了找到這個封包目標MAC位址的出口埠時,Switch會以廣播的方式,將封包往全部的埠都丟出去,當擁有該目標MAC位址的Switch收到這個封包時,會回傳訊息給原來的Switch,而原來的Switch就會以收到這個訊息的埠,當成該目的MAC位址的出口埠,於是CAM表就學到了這筆記錄。 學習起來後,那麼下次就不用廣播而直接傳送。

而這筆記錄,在Switch重新開機、斷電或是一段時間內沒有收到該目的MAC位址的封包時,記錄就會被清掉,等到下次再收到同樣的封包時,由於沒有紀錄,就會再次廣播以重新習得該筆記錄。

廣播封包是很占頻寬的,為了防止這種情形發生,必須要有一種協調的機制,那個東西就是STP(Spanning-Tree Protocol),它會協調同一個區域網路中所有的Switch,並以Root Switch為起點,建立起一個樹狀結構的路徑,而樹狀結構的終點就是一個結束點,這個終點會Block起來,簡單來說,就是門被關起來不准通過。如此,當廣播封包到達這個點時就會直接停止,於是廣播風暴得以避免,而這個終點就是某臺Switch與其他Switch連接的埠。

3. 廣播風暴只會發生在一同個LAN裡面發生

4. 而Router及Switch的功能是不一樣,Router主司路由,也就是該封包要怎麼被轉送到另一個子網路,而Switch是用於區域網路的交換,在區域網路裡,設備之間是用MAC去溝通而不是IP,另外,Switch的交換速度是很快的,路由器是相對較慢的。


Layer3:

如果再把路由表的功能加入 L2 Switch,那麼它就會變成 L3 Switch,可以為 VLAN 建立適當的路由表,讓效能更加提昇。L3 的交換器又稱為 IP Switch 或 Switch Router,透過專屬的 ASIC 晶片來解析第三層表頭(如 IP Header)以達到傳送目的,因此通常可以提高到每秒百萬封包的效能以及數十個高速乙太網路連接埠之容量。L3 Switch 的路由表可以對 VLAN 做更有效的管制,讓廣播封包不會無限制的傳送。







2016年9月19日 星期一

Recursion Algorithm

1.
一般來說,有兩種方式可以撰寫具有重覆執行 (Repetitive)特性的演算法:
Iteration (迴圈)
Recursion (遞迴)

Def: algorithm 中含有self-calling (自我呼叫)敘述存在。




2.遞迴的種類:
直接遞迴 (Direct Recursion):
函式或程序直接呼叫本身時稱之。

void function(void)
    {
     function(void);
     }

間接遞迴 (Indirect Recursion):
函式或程序先呼叫另外的函式,再從另外函式呼叫原來的函式稱之。

void function(void)
    {
     function1()
         void function1(void)
            {
              function();
             }
     }



3.遞迴演算法則的設計:
找出問題的終止條件 (即:base case).
找出問題本身的遞迴關係 (即:general case).
 Procedure 遞迴副程式名(參數)
{
  if (base case)
     return(結果); ……//達到終止條件時結束遞迴,需要時回傳結果
  else
     general case; ……//利用general case執行遞迴呼叫,需要時加上return
}


























2016年9月18日 星期日

條件運算子(Conditional Expressions)

變數 = ( 條件運算式 ) ? 變數值1 : 變數值2;

在指定敘述的「=」號右邊是條件運算式,其功能如同if/else條件,使用「?」符號代替if,「:」符號代替else,如果條件成立,就將變數指定成變數值1,否則就是變數值2。

hour = (hour >= 12) ? hour-12 : hour;

上述程式碼使用條件敘述運算子指定變數hour的值,如果條件為true(即不等於0),hour變數值為hour-12,false(等於0)就是hour。


Chrome 不再支援 NPAPI (Java Applet 所需的技術)

Chrome 不再支援 NPAPI (Java Applet 所需的技術)
Web 瀏覽器的 Java 外掛程式有賴於跨平台外掛程式架構 NPAPI,過去十多年來所有主要 Web 瀏覽器都一直支援這個架構。Google 的 Chrome 版本 45 (訂於 2015 年 9 月發行) 捨棄了對 NPAPI 的支援,受影響的外掛程式包括 Silverlight、Java、Facebook Video 以及其他以 NPAPI 為基礎的外掛程式。

Java 應用程式是透過 Web 瀏覽器,以 Web Start 應用程式 (啟動之後便不需要使用瀏覽器來進行互動) 或是 Java Applet (可以使用瀏覽器進行互動) 的方式來提供。此變更不會影響 Web Start 應用程式,只會影響 Applet。
如果您無法使用 Chrome 來存取 Java 應用程式,Oracle 建議您改用 Internet Explorer (Windows) 或 Safari (Mac OS X)。

2016年9月17日 星期六

perl quotes

Alternative Quotes: qq, q, qw, qx

print qq/Hello\n/;                  # same as: print "Hello\n";
print q/He owes $5.00/;       #  same as: print 'He owes $5.00', "\n";
@states=qw( E T A L );       # same as ("E", "T", "A","L")
$today = qx(date);               # same as $today = 'date'; 



While we usually think of quotes as literal values,
in Perl they function as operators,
providing various kinds of interpolating and pattern matching capabilities.
Perl provides customary quote characters for these behaviors,
but also provides a way for you to choose your quote character for any of them.
In the following table, a "{}" represents any pair of delimiters you choose.

Customary  Generic        Meaning        Interpolates
                 ''       q{}          Literal             no
               ""      qq{}          Literal             yes
               ``      qx{}          Command             yes*
                        qw{}         Word list            no
                //       m{}       Pattern match          yes*
                         qr{}          Pattern             yes*
                         s{}{}      Substitution          yes*
                         tr{}{}    Transliteration         no (but see below)
              <<EOF                 here-doc            yes*

    * unless the delimiter is ''.



perl operators and precedence


operators
+
-
*
/

precedence
4+2*4
(4+2)*4

notice:  ++ different location different result
print $num1++ . "\n";
result: 10

print $num1;
11

print ++$num2 . "\n";
11



$letter  = "a";
$letter++;
print  "$letter\n";





perl conditionals

loop,foreach

if elsif else

unless

perl arrays

array

push

pop

shift

merge

reverse

sort

qw



perl variables

$a = 1;

($a , $b) = (1,2);

$c = $a + $b ;

print "$a\n";
print "$b\n";
result: 1 2

print "$c\n";
result: 3

notice:
print "$a + $b \n";
result: 1 + 2

$str = "Hello Wrold!\n";
print "$str\n";
result: Hello World!


my $name = 'Foo';
print 'Hello $name, how are you?\n';
Single quoted result:  Hello $name, how are you?\n

print "Hello $name, how are you?\n";
Double quoted result:  Hello Foo, how are you?



notice:
$name = 'Foo'; the same as $name = "Foo";
\  在許多程式語言解釋為跳脫字元。
\n 在許多程式語言解釋為換行字元。
quoted裡的元件基本上會當作字串處理,包含實際字串和便數字串。所以 print "$string"可以,但是如果是print "$strint++\n"就不行。要使用print $sting++."\n"


perl basics

1. 由shebang (#!) 開始

#!/usr/bin/perl

類 Unix 作業系統的程式載入器會分析 Shebang 後的內容,將這些內容作為直譯器指令,並呼叫該指令,並將載有 Shebang 的檔案路徑作為該直譯器的參數。


 2. 以browser呼叫執行傳回最少要加上

print "Content-Type: text/html; charset=\"UTF-8\"\n\n";


3. exit;


example code:

#!/usr/bin/perl

print "Content-Type: text/html; charset=\"UTF-8\"\n\n";

print "Hello World!\n";

exit;

result:

Hello World !

2016年9月16日 星期五

mysql to mariaDB(before version 10)

1. 安裝 MariaDB。你的MySQL所有工具,連接程式都可以如常運作。你也不需要匯出和匯入資料。

格式與檔案名稱都是相同的。

2. 所有客戶端的API、協議和結構都是相同的;

3. 所有文件件​​名、二進製文件、路徑、端口、套接字等……全都是一樣的;

4. 所有的MySQL與其他語言(PHP、Perl、Python、Java、.NET、MyODBC、Rub、MySQL C..)

的連接文件無需任何改動,在MariaDB就可工作;


MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕鬆成為MySQL的代替品。

在存儲引擎方面,10.0.9版起使用XtraDB(名稱代號為Aria)來代替MySQL的InnoDB。


版本方面,MariaDB直到5.5版本,均依照MySQL的版本。

因此,使用MariaDB5.5的人會從MySQL 5.5中了解到MariaDB的所有功能。

從2012年11月12日起發布的10.0.0版開始,不再依照MySQL的版號。

10.0.x版以5.5版為基礎,加上移植自MySQL 5.6版的功能和自行開發的新功能。


相對於最新的MySQL5.6,MariaDB在性能、功能、管理、NoSQL擴展方面包含了更豐富的特性。

比如微秒的支持、線程池、子查詢優化、組提交、進度報告等。

MariaDB 權限管理

概念:
1. 使用指令的權限,使用者對所有資料庫使用指令的權限。
grant select on *.* to 'user'@'host';

資料指令權限有select,insert,update,delete,file
結構指令權限create,alter,index,drop,create temporary tables,show view,create routine,alter routine,excute,create view,event,trigger
系統管理指令權限 grant,super,process,reload,shut down,show database,lock tables,create user

2. 對資料庫的權限,可以專為單一資料庫開放所有權限,但其他資料庫只有select的權限。
grant all privileges on database.* to 'user'@'host';


建立使用者:
create user 'user'@'host' identified by 'password';
顯示使用者:
select user,host from mysql.user;
顯示使用者權限:
show grants for 'user@'host';

修改使用者密碼:
set password for 'user'@'host' = password('password');

刪除使用者:
delete from mysql.user where user='user' and host='host';










sysV vs systemd

開機過程
Runlevel(sysV):  開機時選擇runlevel(在inittab設定). 不同的runlevel會執行不同的rc.d裏的service的link. 實際的啟動script在init.d裡面

Systemd:  一堆 unit 項目集合變成一個 group 稱為 target. target 可想成是runlevel.disabled的service 在/usr/lib/systemd/system/裡,enabled的service link 到 /etc/systemd/system 

管理
sysV: init, chkconfig, service.........
systemd: systemctl(stand for: system ConTorL)

其他比較由於 systemd 可以自訂服務相依性的檢查,因此如果 B 服務是架構在 A 服務上面啟動的,那當你在沒有啟動 A 服務的情況下僅手動啟動 B 服務時, systemd 會自動幫你啟動 A 服務。

常用指令
(systemctl 命令 服務.service)
命令: enable(開機自動執行),disable,status,start,restart,stop
ex: systemctl status httpd.service

列出有哪些 target(runlevel): systemctl list-units --type target
列出系統target(runlevel): systemctl get-default 
切換 current target: systemctl isolate multi-user.target (runlevel 3) 
切換 current target: systemctl isolate graphical.target (runlevel 5) 
切換開機target: systemctl set-default multi-user.target (runlevel 3) 
切換開機target: systemctl set-default graphical.target (runlevel 5)




2016年9月6日 星期二

AR, VR, MR

1. 顯示器,沒有把自己本身當參數加進去處理
   例如:電影,電視

2. AR(Augmented Reality) 擴增實境
   把自己本身當參數處理你看到的影像.
   例如算出你處於不同位置所看到的影像不同,像是Pokemon Go
  
3. VR(Virtual Reality) 虛擬實境
   把自己本身當參數處理你看到的影像.加上盡量給你感官。
   Oculus Rift
   HTC Vive
   Sony PS VR
  
   更簡單型:Google Cardboard, 裝入手機即可
  
  
4. MR(Mixed Reality)混合實境
   把其他人事物也當作參數處理看到的影像。
   例如虛擬會議。
   windows holograpic
  
技術:
加強影像處理卡
全景影像,3D
感官設備