新 Dell Latitude 12 7240 開箱

今天早上到公司收到一台廠商借測的新筆電:Latitude 系列的 Ultrabook,12 吋

第一眼看到覺得這外型長得有點像 Macbook Air 了

圖片

掀開蓋子,型號是 E7240,開蓋後看起來就有 Latitude 的特色了,有完整的獨立方向鍵,Page Up/Page Down 鍵,鍵盤顆粒似乎小了一些些,我的手指不算粗,加上鍵程還算 OK,打起來的感覺算是不錯。而且我很喜歡有獨立音量、靜音鍵的設計,有時候臨時要靜音時不會找不到

圖片

背面算是很精簡,支援舊的 E-port docking 大大的加分,現在拍賣上的二手 E-port dock 最便宜的才 NT$680,缺點就是舊款的 dock 很醜,如果有錢的話,這台還支援無線的 dock ,號稱只要靠近 dock 就直接指揮挺組合了,聽起來真是優雅

圖片

後面的連接孔,值得稱讚的是沿用 Dell 舊有的變壓器介面,這年頭許多公司的 Ultrabook 出來之後就把變壓器接頭給改了,像我們公司用了多年的 Dell ,大多數都是每個人配兩條變壓器,那些 NB 壞了但變壓器沒壞的還一堆。另外標準大小的 HDMI 接頭也是和我們公司現用的投影機很搭

圖片

左側只有無線開關,另外就是承襲 Latitude 傳統而來的 Smartcard 插槽,對我們公司來說那些常出差很久,需要在國外處裡一些銀行問題的同事就不用多帶一台讀卡機了

圖片

右側有耳機喇叭接頭、一個 USB port 和 mini Display port,美中不足的是不是裝 D-Sub ,現在台灣有 Display port 的螢幕、投影機算少的,希望這個 mini display port 和 Macbook Air 的是通用的,這樣子網路上一堆便宜的 mini display port to d-sub 相容品可以買

圖片

打開背蓋只要先取下電池,然後拆兩顆螺絲就可以了

圖片

從這邊可以看到有兩個 RAM 的插槽可以用,原本是插 4G 的 RAM,所以再加一條 4G 的對我們來說也就很夠用了,有趣的地方是,這台機器只有兩個 msata 的插槽,左邊的那個是出廠就裝好的 Samsung 128G SSD,右邊的那個被我裝上公司的備品,Crucial M4 128G,開機之後運作正常,不過不是配一個 2.5″ HDD 的插槽讓我有些失望就是了

圖片

結論,我手上拿到的這台機器 CPU 是 4200U 的型號,光以測速的結果來看,還比我現用小黑的 2nd gen i5-2520M 要慢上幾百分,但是實際使用上差異並不大,換來的卻是省電和輕薄,省電方面同事和我都沒有實際測試過時間,不過看 Windows 內建的電池計數器在充滿電時顯示可以使用 6-7 hr 左右,以 3 cell,1.36 kg 水準的筆電來說算是很好用的了。

另外值得一提的是,雖然 x220 號稱裝了 4 cell 電池也是 1.39 kg ,但不知道是不是配重的關係,這台 NB 拿起來非常的輕,加上頗為類似 MBA 的外型,可以上到 Full HD 的螢幕,我們之後如果有要再新採購 NB 時應該就是這一台了

IDC 分級

以前我一直把 IDC分級和 ISP分級 搞混在一起,以致於到國外參觀機房時,對方說他們是 Tier 3 IDC 時,我還以為他們是最 low 的 (ISP 分級中 Tier 3 是最 low 的),後來經前輩提醒,我才看了英文版的 Wiki 的 IDC分級,這下子才搞懂,以下就做個簡單的翻譯好了:

說是搞懂了其實也不太對,因為從 Wiki 的說明看來,喜歡搞「分級標準」的老外還不只一間,例如美國的 ANSI 就在 TIA-942 標準內定義了四個分級,我們一般辦公室內的 Server Room 叫做 Tier 1,而機房那種有各種備援機制、進出需在額外的隔離空間管制的叫 Tier 4 機房

而德國的標準則分成五類

Wiki 上最後一個有放表格的則是我常聽到那些 IDC 自我吹噓時使用的分類,原始出處應該是這裡

ier Level Requirements
1
  • 有一個放置 IT 設備的獨立空間
  • 沒有備援的機制也沒關係
  • 這些基礎設施必須要每年關機維護檢查
  • 基礎設施 (我想是電力、空調、消防、安全及環控) 的可用性要可以達到 99.671%
2
  • 符合所有 Tier 1 的要求
  • 可用性達 99.741% 
  • 必須要有備援機制,但備援機制維護時允許服務中斷
3
  • 符合所有 Tier 1, Tier 2 的要求
  • Multiple independent distribution paths (我猜也是冷氣、電力、網路) 這些基礎設施,也就是任何基礎設施都要有備援的意思
  • 所有的 IT 設備在電源方面都要有雙迴路,而且雙迴路要和機房的架構是相容的 (也就是說自己弄的雙迴路不算數,要那種大樓切換迴路時也會生效的迴路才算)
  • 所有的基礎設施都要能達到可同時維護性的要求,且可用性需達到 99.982%
4
  • 符合所有 Tier 1, Tier 2 和 Tier 3 的要求
  • 所有冷卻系統都必須是獨立的雙電源迴路,包含冷卻設備(水塔、冷排?),散熱器、通風扇和空調設備系統
  • 可用性需達到 99.995%
  • 全球僅有 12 座機房達到 Tier 4 的要求?

中國那邊某網站找到的圖表似乎還更詳盡,看起來 Tier 3 和 Tier 4 的最大差異應該就是在基礎設施上都需要有 HA,基礎設施包含冷氣、電、UPS 及他們的管線,一個是 Active-Standby ,另一個是 Active-Active:

Supernetting PHP 實做-2

asdf
<?php
asdf

sfdfd

<?php $time_start = microtime(true);

/**  * Initial  *  * */ $start = $_POST[“start"]; $Origin = $_POST[“Origin"]; $Join = $_POST[“Join"]; $Percentage = $_POST[“Percentage"]; $masktype = $_POST[“masktype"]; $is_debug = $_POST[“is_debug"]; $testType = $_GET[“testType"]; $TFile[“default"][“O"] = “./example/Origin.txt"; $TFile[“default"][“J"] = “./example/Join.simple.txt"; $TFile[“mask"][“O"] = “./example/Origin_mask.txt"; $TFile[“mask"][“J"] = “./example/Join.simple_mask.txt"; $TFile[“full"][“O"] = “./example/Origin.txt"; $TFile[“full"][“J"] = “./example/Join.full.txt"; $TFile[“waste"][“O"] = “./example/origin-waste.txt"; $TFile[“waste"][“J"] = “./example/join-waste.txt";

include(“./libs/supernetting_func.php");

if(trim($start) == NULL) {  if($testType == NULL) $testType = “default";    $TestFile = $TFile[$testType];    $fp = fopen($TestFile[“O"], “r");  $Origin =  fread($fp, filesize($TestFile[“O"]));    $fp = fopen($TestFile[“J"], “r");  $Join =  fread($fp, filesize($TestFile[“J"]));    } else {  $OriginList = explode(“\r\n", $Origin);  $JoinList = explode(“\r\n", $Join);    $Supernetting = new Supernetting();  $Supernetting->setMaskType($masktype);  if($is_debug == “yes") $Supernetting->enableDebug();  $Supernetting->start($OriginList, $JoinList, $Percentage / 100);  //$Supernetting->aggregateSupernetting($OriginList, $JoinList, $Percentage / 100);      $Origin = $Supernetting->getOrigin();  $Join = $Supernetting->getJoin();  $ResultList = $Supernetting->getResultList();  $AddList = $Supernetting->getAddList();  $DeleteList = $Supernetting->getDeleteList();

$AddMessage = $Supernetting->AddMessage;  $DeleteMessage = $Supernetting->DeleteMessage; }

$time_end = microtime(true);

?>

<html> <head> <title>Supernetting</title> <link type="text/css" href="./css/supernetting.css" rel="stylesheet" />     </head> <body>

<form method=POST action="<?php echo $_SERVER[“PHP_SELF"]; ?>"> <table> <tr>  <th colspan=6 style="color:#F00;"><?php echo $Supernetting->errorMessage; ?></th> </tr> <tr>  <th colspan=6>Supernetting.    Use Case:   {    <a href="./supernetting.php?testType=default">Default</a>,    <a href="./supernetting.php?testType=full">Full</a>,    <a href="./supernetting.php?testType=waste">IP waste</a>,    <a href="./supernetting.php?testType=mask">Mask</a>   }  </th> </tr> <tr>  <td>Origin</td>  <td>Join</td>  <td style="background-color: #BAD2BA" rowspan=2></td>  <td>Result</td>  <td>Add</td>  <td>Delete</td> </tr> <tr>  <td><textarea name="Origin" cols=32 rows=30><?php echo (!is_array($Origin))?$Origin:implode(“\n", $Origin); ?></textarea></td>  <td><textarea name="Join" cols=32 rows=30><?php echo (!is_array($Join))?$Join:implode(“\n", $Join); ?></textarea></td>  <td><textarea cols=32 rows=30><?php echo (!is_array($ResultList))?"":implode(“\n", $ResultList); ?></textarea></td>  <td><textarea cols=32 rows=30><?php echo (!is_array($AddList))?"":implode(“\n", $AddList); ?></textarea></td>  <td><textarea cols=32 rows=30><?php echo (!is_array($DeleteList))?"":implode(“\n", $DeleteList); ?></textarea></td> </tr> <tr>  <th colspan=6>   Convert mask:    <input type=radio name="masktype" value=cidr <?php echo ($masktype == “cidr" or empty($masktype))?"checked":"" ?> > CIDR    <input type=radio name=masktype value=mask <?php echo ($masktype == “mask")?"checked":"" ?> > Mask  </th> </tr> <tr>  <th colspan=6>Percentage: <input type=text name="Percentage" value="<?php echo ($Percentage < 1)?20:$Percentage; ?>" >% </th> </tr> <tr>  <th colspan=6>   Spend Time(sec): <?php echo round($time_end – $time_start, 3); ?>   Debug: <input type="checkbox" name="is_debug" value="yes" <?php echo ($is_debug == “yes")?"checked":"" ?>>    </th> </tr><tr>  <th colspan=6> <input type=submit name=start value=Go> </th> </tr> </table>

<?php

if($is_debug != “yes")  ; else {  //echo json_encode($AddMessage);  //echo json_encode($DeleteMessage);  echo “<hr />"   ."<table>"    ."<tr>"     ."<td colspan=\"2\" style=\"font-weight:bold;text-align:center;\">Debug Information</td>"    ."</tr>";    if($masktype != NULL AND $masktype != “cidr")   echo “<tr>"     ."<td colspan=\"2\" style=\"font-weight:bold;text-align:center;color:#F00;\">Debug mode only support CIDR. </td>"    ."</tr>";   else  {   echo  “<tr>"        ."<td style=\"font-weight:bold;text-align:center;\">Add List</td>"      ."<td style=\"font-weight:bold;text-align:center;\">Delete List</td>"     ."</tr>"     ."<tr>";       echo “<td style=\"text-align:left;\">";   @reset($AddList);   while(list($key, $thisValue) = @each($AddList))   {    echo “[“.$thisValue."]<br />";    @ksort($AddMessage[$thisValue], SORT_NATURAL);    @reset($AddMessage[$thisValue]);    while(list($key2, $Value2) = @each($AddMessage[$thisValue]))    {     echo " … from “.$key2."<br />";    }     }   echo “</td>";      echo “<td style=\"text-align:left;\">";   @reset($DeleteList);   while(list($key, $thisValue) = @each($DeleteList))   {    echo “[“.$thisValue."]<br />";    @ksort($DeleteMessage[$thisValue], SORT_NATURAL);    @reset($DeleteMessage[$thisValue]);    while(list($key2, $Value2) = @each($DeleteMessage[$thisValue]))    {     echo " … to “.$key2."<br />";    }   }   echo “</td>";  }    echo “</tr></table>"; }

?>

</body> </html>


	

Supernetting PHP 實做

<?php
$time_start = microtime(true);
/**
 * Initial
 * 
 * */
$start = $_POST["start"]; 
$Origin = $_POST["Origin"];
$Join = $_POST["Join"];
$Percentage = $_POST["Percentage"];
$masktype = $_POST["masktype"];
$is_debug = $_POST["is_debug"];
$testType = $_GET["testType"];
$TFile["default"]["O"] = "./example/Origin.txt";
$TFile["default"]["J"] = "./example/Join.simple.txt";
$TFile["mask"]["O"] = "./example/Origin_mask.txt";
$TFile["mask"]["J"] = "./example/Join.simple_mask.txt";
$TFile["full"]["O"] = "./example/Origin.txt";
$TFile["full"]["J"] = "./example/Join.full.txt";
$TFile["waste"]["O"] = "./example/origin-waste.txt";
$TFile["waste"]["J"] = "./example/join-waste.txt";

include("./libs/supernetting_func.php");
if(trim($start) == NULL)
{
 if($testType == NULL) $testType = "default";

 $TestFile = $TFile[$testType];

 $fp = fopen($TestFile["O"], "r");
 $Origin = fread($fp, filesize($TestFile["O"]));

 $fp = fopen($TestFile["J"], "r");
 $Join = fread($fp, filesize($TestFile["J"])); 

}
else
{
 $OriginList = explode("\r\n", $Origin);
 $JoinList = explode("\r\n", $Join);

 $Supernetting = new Supernetting();
 $Supernetting->setMaskType($masktype);
 if($is_debug == "yes") $Supernetting->enableDebug();
 $Supernetting->start($OriginList, $JoinList, $Percentage / 100);
 //$Supernetting->aggregateSupernetting($OriginList, $JoinList, $Percentage / 100);

 $Origin = $Supernetting->getOrigin();
 $Join = $Supernetting->getJoin();
 $ResultList = $Supernetting->getResultList();
 $AddList = $Supernetting->getAddList();
 $DeleteList = $Supernetting->getDeleteList();
$AddMessage = $Supernetting->AddMessage;
 $DeleteMessage = $Supernetting->DeleteMessage;
}
$time_end = microtime(true);
?>

<html>
<head>
<title>Supernetting</title>
<link type="text/css" href="./css/supernetting.css" rel="stylesheet" /> 
</head>
<body>
<form method=POST action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<table>
<tr>
 <th colspan=6 style="color:#F00;"><?php echo $Supernetting->errorMessage; ?></th>
</tr>
<tr>
 <th colspan=6>Supernetting. 
 Use Case:
 {
 <a href="./supernetting.php?testType=default">Default</a>, 
 <a href="./supernetting.php?testType=full">Full</a>, 
 <a href="./supernetting.php?testType=waste">IP waste</a>, 
 <a href="./supernetting.php?testType=mask">Mask</a>
 }
 </th>
</tr>
<tr>
 <td>Origin</td>
 <td>Join</td>
 <td style="background-color: #BAD2BA" rowspan=2></td>
 <td>Result</td>
 <td>Add</td>
 <td>Delete</td>
</tr>
<tr>
 <td><textarea name="Origin" cols=32 rows=30><?php echo (!is_array($Origin))?$Origin:implode("\n", $Origin); ?></textarea></td>
 <td><textarea name="Join" cols=32 rows=30><?php echo (!is_array($Join))?$Join:implode("\n", $Join); ?></textarea></td>
 <td><textarea cols=32 rows=30><?php echo (!is_array($ResultList))?"":implode("\n", $ResultList); ?></textarea></td>
 <td><textarea cols=32 rows=30><?php echo (!is_array($AddList))?"":implode("\n", $AddList); ?></textarea></td>
 <td><textarea cols=32 rows=30><?php echo (!is_array($DeleteList))?"":implode("\n", $DeleteList); ?></textarea></td>
</tr>
<tr>
 <th colspan=6>
 Convert mask: 
 <input type=radio name="masktype" value=cidr <?php echo ($masktype == "cidr" or empty($masktype))?"checked":"" ?> > CIDR 
 <input type=radio name=masktype value=mask <?php echo ($masktype == "mask")?"checked":"" ?> > Mask
 </th>
</tr>
<tr>
 <th colspan=6>Percentage: <input type=text name="Percentage" value="<?php echo ($Percentage < 1)?20:$Percentage; ?>" >% </th>
</tr>
<tr>
 <th colspan=6>
 Spend Time(sec): <?php echo round($time_end - $time_start, 3); ?>
 Debug: <input type="checkbox" name="is_debug" value="yes" <?php echo ($is_debug == "yes")?"checked":"" ?>> 

 </th>
</tr><tr>
 <th colspan=6> <input type=submit name=start value=Go> </th>
</tr>
</table>
<?php
if($is_debug != "yes")
 ;
else
{
 //echo json_encode($AddMessage);
 //echo json_encode($DeleteMessage);
 echo "<hr />"
 ."<table>"
 ."<tr>"
 ."<td colspan=\"2\" style=\"font-weight:bold;text-align:center;\">Debug Information</td>"
 ."</tr>";

 if($masktype != NULL AND $masktype != "cidr")
 echo "<tr>"
 ."<td colspan=\"2\" style=\"font-weight:bold;text-align:center;color:#F00;\">Debug mode only support CIDR. </td>"
 ."</tr>"; 
 else
 {
 echo "<tr>" 
 ."<td style=\"font-weight:bold;text-align:center;\">Add List</td>"
 ."<td style=\"font-weight:bold;text-align:center;\">Delete List</td>"
 ."</tr>"
 ."<tr>";

 echo "<td style=\"text-align:left;\">";
 @reset($AddList);
 while(list($key, $thisValue) = @each($AddList))
 {
 echo "[".$thisValue."]<br />";
 @ksort($AddMessage[$thisValue], SORT_NATURAL);
 @reset($AddMessage[$thisValue]);
 while(list($key2, $Value2) = @each($AddMessage[$thisValue]))
 {
 echo " ... from ".$key2."<br />";
 } 
 }
 echo "</td>";

 echo "<td style=\"text-align:left;\">";
 @reset($DeleteList);
 while(list($key, $thisValue) = @each($DeleteList))
 {
 echo "[".$thisValue."]<br />";
 @ksort($DeleteMessage[$thisValue], SORT_NATURAL);
 @reset($DeleteMessage[$thisValue]);
 while(list($key2, $Value2) = @each($DeleteMessage[$thisValue]))
 {
 echo " ... to ".$key2."<br />";
 }
 }
 echo "</td>";
 }

 echo "</tr></table>";
}
?>

</body>
</html>