網頁

2017年12月6日 星期三

備忘:簡易弄懂 MYSQL 的 JOIN用法 (LEFT JOIN , RIGHT JOIN 使用時機)

參考資料來源:http://blog.webgolds.com/view/189

對於inner join, outer join , left join , right join還是很模糊嗎?

沒關係,這邊提供最簡易的SQL版本,

輕鬆好上手。

首先,我們先建立2個資料表,分別是table1跟table2。

table1
id
210
211
212
213

CREATE TABLE `table1` (
  `id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `table1` (`id`) VALUES
(210),
(211),
(212),
(213);

-- 2016-02-09 23:16:25

table2
id
210
214
215
212
212

CREATE TABLE `table2` (
  `id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
#台灣金站
INSERT INTO `table2` (`id`) VALUES
(210),
(214),
(215),
(212),
(212);

-- 2016-02-09 23:17:01


接下來就來測試inner join囉!!

Syntax
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id

看看得到的結果:

idid
210210
212212
212212




接下來換LEFT JOIN囉!

Syntax
SELECT a.id, b.id
FROM table1 as a
LEFT JOIN table2 as b
ON a.id= b.id

看看得到的結果:
a.idb.id
210210
211null
212212
212212
213null

結果說明: 
Left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的. 
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID). 
B表記錄不足的地方均為NULL. 


那麼RIGHT JOIN會是如何呢?

Syntax
SELECT a.id, b.id
FROM table1 as a
RIGHT JOIN table2 as b
ON a.id= b.id

看看得到的結果:
a.idb.id
210210
null214
null215
212212
212212

哇,可以看到跟LEFT的情況倒過來了呢。

另外,很多人都不知道JOIN裡面USING 跟 ON 的差異在哪裡?
以我們剛剛第一個例子來說:
#範例 B-1
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id
由於我們的欄位都是共同為ID這個名稱(two tables share a column of the exact same name ),
所以其實也可以寫成這樣喔:
#範例 B-2
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
USING (id)
範例 B-1跟範例 B-2 執行結果都會得到一樣。

2017年11月6日 星期一

SSMS 新增一個帳號,無法關閉強制帳號原則?

我在 SQL Server 2016 新增一個使用者,但我不想登入時變更密碼,並且關閉下面2個強制原則:
強制執行密碼原則
強制執行密碼逾期

關閉時會出現下面錯誤訊息:
當MUST_CHANGE為ON時,CHECK_POLICY和CHECK_EXPIRATION選項不能被關閉。

解決方案:
要解決這個問題,您首先必須要更改密碼,而不必更改密碼策略的選項。
你可以把密碼更改成與現有的密碼相同。^_^

但是,你仍然必須要改變密碼!^_^(我不太懂這是什麼邏輯?)
您可以利用SSMS 的查詢介面 GUI 來完成,我蠻喜歡使用腳本的,因為它給了我靈活的操作方式。

先利用下面的步驟,變更第一次密碼,我設定成相同的密碼,就可以解決“用戶必須更改密碼”訊息。

USE Master
GO
ALTER LOGIN [Login Name] WITH PASSWORD = 'Same Password'
GO

現在讓我們關閉 passowrd 原則。

ALTER LOGIN [Login Name] WITH
      CHECK_POLICY = OFF,
      CHECK_EXPIRATION = OFF;

或者直接把勾勾取消也已經可以了!^_^

2017年6月23日 星期五

Ical.NET 使用方式

程式碼如下:

 var calendarCollection = Ical.Net.Calendar.LoadFromFile(@"c:\basic.ics");
            var firstCalendar = calendarCollection.First();
            //var firstEvent = firstCalendar.Events.First();
            var anEventList = firstCalendar.Events;

            String TestMergr;
            String TestMergr_;
            TestMergr = String.Empty;
            TestMergr_ = String.Empty;
            anEventList.ToList().ForEach(s =>
            {
                TestMergr_ =
                       "<tr>" +
                       "<td align=center valign=middle > " + s.DtStart + " </td>" +
                       "<td align=center valign=middle > " + s.DtEnd + " </td>" +
                       "<td align=center valign=middle > " + s.Summary + " </td>" +
                       "<td align=center valign=middle > " + s.Location + " </td>" +
                       "</tr>";
                TestMergr = TestMergr + TestMergr_;
            });

testall.Text = TestMergr;

========================================================================
參考網址Ical.NET Wiki 說明:https://github.com/rianjs/ical.net/wiki/Deserialize-an-ics-file

一個ics文件在其中有多個VCALENDAR是有點不尋常,但它是允許的。由於ics文件的容器類功能,加載一個可以生成一個CalendarCollection而不是一個Calendar。在大多數用例中,Calendar該集合中只有一個。(翻譯)

此示例顯示最常見的用例,其中一個Calendar用於CalendarCollection。我們將使用LINQ來“到達”每個集合,並採取第一個事件。(翻譯)

var calendarCollection = Calendar.LoadFromFile(@"path\to\file.ics");
var firstCalendar = calendarCollection.First();
var firstEvent = firstCalendar.Events.First();

****************************************************
var calendarCollection = Ical.Net.Calendar.LoadFromFile(@"c:\basic.ics");
日曆集合 = Ical.Net 從檔載入日曆 (檔案位置)

var被稱為隱含型別,在編譯時期宣告成隱含型別的變數,其真實型別由等號右邊的值型別所決定,請記住,是在編譯時期就已經決定其真實型別了。
@忽略跳脫符號

var firstCalendar = calendarCollection.First();
第一個日曆 = 日曆集合.第一()

var firstEvent = firstCalendar.Events.First();                     (網站使用的方法)
第一個事件 = 第一個日曆.事件.第一()

var anEventList = firstCalendar.Events;
事件清單 = 第一個日曆.事件                                          (使用下列方法就可以取用了)

anEventList.ToList().ForEach(s => {要做的動作});
事件清單轉成List清單,並且使用foeach操作(s =>



2017年6月19日 星期一

行事曆推撥管理(SQL 指令)

下列虛擬測試(非真實表)
於 CalPushMan 資料庫

建立 CalPushMan 資料表

CREATE TABLE CalPush (
UID varchar(40) PRIMARY KEY NOT NULL,
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)
==============================================================
建立 CalPushManSet 資料表

CREATE TABLE CalPushManSet (
SetNum int PRIMARY KEY IDENTITY NOT NULL,
Unit varchar(40) NOT NULL,
IcalUrl varchar(256) NOT NULL,
)
==============================================================
建立 CalPushAccount 資料表

CREATE TABLE CalPushAccount (
AccountNum int PRIMARY KEY IDENTITY NOT NULL,
AccountlID varchar(20) NOT NULL,
AccountStaffLevel varchar(10) NOT NULL,
)




==============================================================
說明:
CREATE TABLE CalPush (                              
          <====建立資料表  CalPush
UID varchar(40) PRIMARY KEY NOT NULL,
          <====建立欄位UID,變動長度字串(最大40位元,設為PK,不能為 NULL 空值
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
          <====建立欄位SUMMARY,變動長度字串(最大2GB,預設為'空'字串,不能為 NULL 空值
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)

SetNum int PRIMARY KEY IDENTITY NOT NULL,
          <====建立欄位SetNum,整數資料,自動遞增(開始,遞增)預設都為1,不能為 NULL 空值

2017年6月15日 星期四

行事曆推撥管理(VS2013 新增 Web Form 網站)

VS2013 安裝以下 NuGet 套件

  • ASP.NET Identity Database v2.0.0
  • BetterRegions
  • BootstrapSnippets
  • ChromeExtensionVsix
  • Cobisi.RoutingAssistant-v1.8
  • CodeAlignment
  • CodeJumper
  • CodeMaid v10.4.53
  • ColorThemeEditor
  • CSharpOutline
  • DeveloperAssistant_2012
  • GitSccProvider
  • GoToDef
  • JavaScript Snippet Pack v1.2.15
  • jQueryCodeSnippets
  • JsMapParser.VsExtension
  • Mindscape.WebWorkbench.Integration.10
  • NuGet.Tools
  • ProPowerTools
  • Saha Wpf Theme 2012
  • SlowCheetah.VisualStudio
  • SqlCeVsToolbox.4.7.87
  • WebEssentials2012
  • VS11-KB3002339.exe
以下是校務系統需要安裝的
安裝了以後,
ConnDB.cs 裡的
using WebMatrix.Data;

unicodeConvert.cs 裡的
using iTextSharp.text;                      
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;

Json.cs 裡的
using Newtonsoft.Json;

*.cs 裡的
using OfficeOpenXml;
using OfficeOpenXml.Style;

using Novacode;

using AjaxControlToolkit;

using System.Transactions;

就可以正常了。

========================================================================
HTML font color 文字顏色
CSS color 文字顏色

========================================================================
Site.master
修改 <title><%: Page.Title %> ~行事曆推撥管理</title>


HTML font color 文字顏色範例二、透過 css style 來設計 font color
<span style="color:orange;">文字顏色為橘色</span>
以上範例輸出
文字顏色為橘色






2017年6月12日 星期一

visual studio 2012 nuget 建議

資料來源:http://kevintsengtw.blogspot.tw/2014/05/visual-stuidio-2012-aspnet-mvc-5.html

VSCommands

Web Essentials 2012

devColor

Visual Studio 2012 Color Theme Editor

jQuery Code Snippets

Telerik ASP.NET MVC VSExtensions

Telerik ASP.NET AJAX VSExtensions

Region Highlights

Code Jumper

Productivity Power Tools 2012

I Hate #Regions


要讓 Visual Studio 2012 可以建立並開發 ASP.NET MVC 5 專案,必須要下載並安裝「ASP.NET and Web Tools 2013.1 for Visual Studio 2012」,下載的位置如下:

https://www.microsoft.com/web/handlers/webpi.ashx/getinstaller/WebNode11Pack.appids

Extended Template for ASP.NET MVC 5 from Visual Studio 2012
如果你還是想在 VS2012 裡所開發的 ASP.NET MVC 5 專案範本是跟 VS2013 的一樣的話,可以使用 Jose M. Aguilar 所建立的範本,文章連結如下:

Extended Template for ASP.NET MVC 5 from Visual Studio 2012 -  campus MVP.net - Jose M. Aguilar

將文章裡所提供的專案範本下載到電腦裡,然後將壓縮檔的內容解壓縮後複製到以下的路徑,

%USERPROFILE%\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\Web

簡單說就是「文件」資料夾裡的 Visual Studio 2012 目錄,如下:

C:\Users\使用者名稱\Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\Web

專案範本

先在專案上面按右鍵,選擇[管理NuGet套件]=>還原
再按右鍵,選擇[管理NuGet套件]

2017年6月6日 星期二

公告推撥系統~紀錄 (轉C#,使用VS2017+ASP.NET Code 1.1)

建立專案
    • [檔案]->[新增]->[專案]
      • Visual C#->Web->ASP.NET Web 應用程式(.NET Framework)
        • 名稱:
        • 方案名稱:
      • 選 MVC

    
    
    加入會用到的 NuGet 模組

    • Install-Package WebMatrix.Data (會安裝 Microsoft.AspNet.WebPages.Data 及 WebMatrix.Data)


    加入資料庫通用模組
    ConnDB
    ★using WebMatrix.Data;











    把資料庫,反向工程,轉成XXXXXX.cs Models 函式

    VS2017
    工具>NgGet封裝管理員>套件管理器主控台

    執行下列命令  (""裡的字串,是複製資料表>屬性>連接字串)
    PM>scaffold-dbcontext "Data Source=資料庫IP;Initial Catalog=資料表;Integrated Security=False;User ID=使用者;Password=密碼;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -force
    會轉出如下資料

    using System;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata;
     
    namespace 公告推撥系統
    {
        public partial class NTTU_BulletinContext : DbContext
        {
            public virtual DbSet<MainBulletin> MainBulletin { getset; }
     
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
                optionsBuilder.UseSqlServer(@"Data Source=xxx.xxx.xxx.xxx;Initial Catalog=資料表;Integrated Security=False;User ID=帳號;Password=密碼;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
            }
     
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<MainBulletin>(entity =>
                {
                    entity.HasKey(e => e.BulletinNumber)
                        .HasName("PK_main_bulletin");
     
                    entity.ToTable("main_bulletin");
     
                    entity.Property(e => e.BulletinNumber)
                        .HasColumnName("bulletin_number")
                        .ValueGeneratedNever();
     
                    entity.Property(e => e.ActivityPost).HasColumnName("activity_post");
     
                    entity.Property(e => e.BulletinContent)
                        .HasColumnName("bulletin_content")
                        .HasColumnType("varchar(max)");
     
                    entity.Property(e => e.BulletinTitle)
                        .HasColumnName("bulletin_title")
                        .HasColumnType("varchar(max)");
     
                    entity.Property(e => e.DraftBoolean).HasColumnName("draft_boolean");
     
                    entity.Property(e => e.FilePath)
                        .HasColumnName("file_path")
                        .HasColumnType("varchar(250)");
     
                    entity.Property(e => e.MeetingPost).HasColumnName("meeting_post");
     
                    entity.Property(e => e.OpenPost).HasColumnName("open_post");
     
                    entity.Property(e => e.PostDateTime)
                        .HasColumnName("post_date_time")
                        .HasColumnType("smalldatetime");
     
                    entity.Property(e => e.PostEmail)
                        .HasColumnName("post_email")
                        .HasColumnType("varchar(100)");
     
                    entity.Property(e => e.PostRemind).HasColumnName("post_remind");
     
                    entity.Property(e => e.PostUnit)
                        .IsRequired()
                        .HasColumnName("post_unit")
                        .HasColumnType("varchar(100)");
     
                    entity.Property(e => e.StartDateTime)
                        .HasColumnName("start_date_time")
                        .HasColumnType("smalldatetime");
     
                    entity.Property(e => e.StopDateTime)
                        .HasColumnName("stop_date_time")
                        .HasColumnType("smalldatetime");
                });
            }
        }
    }

    2017年6月2日 星期五

    建議安裝 Visual Studio 2017 擴充套件

    資料參考來源:http://www.cnblogs.com/linezero/p/vs2017aspnetcore.html

    節錄如下:

    编辑的csproj文件推荐NuGet 安装包: Project File Tools

     https://marketplace.visualstudio.com/items?itemName=ms-madsk.ProjectFileTools

     ASP.NET Core Tag Helpers 智能提示:Razor Language Services

     https://marketplace.visualstudio.com/items?itemName=ms-madsk.RazorLanguageServices

    Web Essentials Web开发利器:

    https://marketplace.visualstudio.com/items?itemName=MadsKristensen.WebExtensionPack2017

    Productivity Power Tools 2017 效率开发:

    https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProductivityPowerPack2017

    2017年5月31日 星期三

    公告推撥系統~紀錄 (轉C#,使用VScode+ASP.NET Code 2.0)

    安裝 VS Code

    下載安裝 Install .NET Core 2.0 Preview 1
    https://www.microsoft.com/net/core/preview#windowscmd

    我們初始化一個示例Hello World 的 Web 應用程序!

    \htdocs>md hwapp
    \htdocs>cd hwapp
    \htdocs\hwapp>dotnet new mvc
    The template "ASP.NET Core Web App" created successfully.

    第一個命令將恢復在項目文件中指定的包,第二個命令將運行實際的樣本:
    \htdocs\hwapp>dotnet restore
      Restoring packages for C:\htdocs\sas\sas.csproj...
      Generating MSBuild file C:\htdocs\sas\obj\sas.csproj.nuget.g.props.
      Generating MSBuild file C:\htdocs\sas\obj\sas.csproj.nuget.g.targets.
      Writing lock file to disk. Path: C:\htdocs\sas\obj\project.assets.json
      Restore completed in 9.05 sec for C:\htdocs\sas\sas.csproj.

      NuGet Config files used:
          C:\Users\wengw\AppData\Roaming\NuGet\NuGet.Config
          C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config

      Feeds used:
          https://api.nuget.org/v3/index.json
          C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

    \htdocs\hwapp>dotnet run
    Hosting environment: Production
    Content root path: C:\htdocs\sas
    Now listening on: http://localhost:5000
    Application started. Press Ctrl+C to shut down.

    查詢 ASP.NET Core 版本
    >dotnet --version
    1.0.4 或
    2.0.0-preview1-005977

    global.json     (切換版本)
    {
       "sdk": {
             "version": "2.0.0-........"
           //"version": "1.0.4"
        }
    }



    調整 VS code+Angular 4~紀錄

    調整 VS code 能正常執行終端機

    1. 先開啟命令提示字元(Windows 終端機)
    2. 在上面外框上,按滑鼠右鍵,選內容,選項處勾選[使用舊版主控台]
    3. VScode => 檔案 => 喜好設定 => 設定 => 設定選項的值為terminal.integrated.shell.windows: "cmd.exe",
    4. 按 Ctrl + ` 就可以叫出終端機了,還可以下 ng 指令喔。
    • 需安裝 npm install -g @angular/cli@latest

    建立新專案
    1. 開啟終端機
    2. 於網頁目錄下指令 c:\htdocs>ng new [專案名稱]
    3. 就會建立一個 [專案目錄],並且安裝相關的 angular 4 模組
    4. 於 [專案目錄] 底下,下指令 >ng -v 會顯示已安裝的 angular 4 模組版本
    • 接下來於 VScode 按 Ctrl + O 就可以開啟目錄選擇視窗,選擇專案的目錄,就可以切換工作的目錄了。
    安裝 Angular 4

    1. 安裝 nvm-winodws ( node.js windows 版的版本管理器)
    2. 使用 nvm 安裝 node.js (>nvm list available,>nvm install 6.10.3),LTS穩定的版本號碼
    3.  啟用版本管理 (>nvm on)
    4.  查詢版本號碼 (>nvm -v,>node -v,>npm -v,>tsc -v)
    5.  更新 npm 3.10.10 到 5.0.0 (>npm -g install npm)
    6.  驗證 npm cache 是否正確 (>npm cache verify)
    7.  安裝 Angular 4 
    • npm install -g @angular/cli@latest
    • ng new sas (建立 angular 4 的專案)
    • 在專案目錄底下執行下面更新:
    • ng -v (@angular/cli: 1.0.6)
    • npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save
    • (上面指令會多了 @angular/animations: 4.1.3,@angular/platform-server: 4.1.3)
    • npm -g install typescript


    ========================================================================
    小技巧
    終端機:
    • rmdir sas /s                                       //刪除 sas 目錄,含底下的所有子目錄與檔案



    2017年5月25日 星期四

    node.js 用 npm 指令 更新支援 Angular 4


    先進去工作目錄,例如:c:\htdoc\sas
    把 angular 4 檔案放進來,在 c:\htdoc\sas 下面執行指令:

    c:\htdoc\sas>npm install

    On Linux/Mac:
    c:\htdoc\sas>
    npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save

    On Windows:
    c:\htdoc\sas>
    npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

    會出現 typescript 無法更新到 2.3.3 ,改用下列指令就可以。

    Installing typescript

    For the latest stable version:(最後穩定的版本)

    c:\htdoc\sas>npm install -g tslint typescript

    2017年5月24日 星期三

    用 Angular CLI 節省開發時間(目前支援Angular 4有問題,建議先不安裝)

    Angular CLI是隨著Angular2發展時一併產生的一個指令列工具,一樣基於「習慣取代配置」的優良傳統,我們可以用Angular CLI快速產生開發Angular2程式時所需要的檔案範本,另外也包含了軟體開發生命週期會用到的bundle, lint, unit test, end to end test等功能,也全都包在Angular CLI裡面了,因此透過Angular CLI工具,我們可以大幅節省許多準備檔案的時間!由於之後的Angular2速成班教學中我們也會大量使用Angular CLI來產生相關需要的檔案,因此今天就先來簡單介紹一下Angular CLI這個強大的產生器功能。

    安裝Angular CLI並產生Angular2專案

    npm install -g angular-cli

    接下來就可以使用 ng 這個指令來執行這種開發Angular2專案需要的動作啦。

    首先我們先用 ng --help 來看看所有可用的指令:

    可以看到洋洋灑灑一大堆的指令說明,也可以用 ng --help [command]看比較"精簡"一點的說明。例如我想知道generate這個指令的用法,就輸入 ng --help generate,就可以單純看某個指令的用法囉。

    接下來我們就稍微說明一些常用的Angular CLI指令吧!

    ng new

    安裝好Angular CLI以後當然是立刻使用 ng new [專案名稱] 來產生一個Angular2專案啦。

    這個指令會依我們輸入的專案名稱產生一個專案目錄,同時幫我們把所有預設需要的相關套件都紀錄在package.json,然後將所有需要的套件都下載下來;除此之外也會幫我們產生一個Angular2專案最基本需要的程式碼、還有簡單的測試案例、測試環境設定、編輯器環境設定(如果編輯器支援的話)、預設的與法規範設定檔(tslint.json)等等;想想看這些步驟如果要自己一個一個處理要花多少時間,還要擔心人腦智慧出錯的可能性,但透過ng new,只需要下指令並稍等一下就可以啦!

    關於ng new產生的專案目錄,在下一篇文章我們會做一個比較詳細的介紹。

    ng generate(ng g)

    ng generate可以說是整個Angular CLI裡面最常用到的指令,它的功能就是用來產生Angular2的元件(component)、服務(service)等等的程式雛形,由於generate指令非常常用,但generate字母又不少,因此我們也可很簡單的使用 ng g來執行產生動作,目前ng g可產生以下類型的程式



    例如需要產生一個Angular2的元件,可以使用 ng g component,來產生一個component所需要的檔案,另外我們也可以在把剛剛的指令簡化成ng g c。只需要短短幾個字,就可以產生許多的程式碼囉!

    根據官方的Angular CLI原始碼,我們也可以看到不同程式碼雛形的指令簡化

    不過很可惜,由於Angular2的route在RC階段一直有改變,雖然正式版已經release了,但目前Angular CLI還不支援route的產生,因此使用ng g r來產生route的話,會出現以下錯誤訊息,期待某天可以正常產生囉!



    使用ng generate產生的物件會依照預設值放在特定目錄下,若需要指定目錄也可以透過相對路徑的表示方式來改變目錄,例如ng g c todo-items預設檔案會產生在/src/app/todo-list下面,我們可以改用ng g c todo-list\todo-items來將檔案改為產生在/src/app/todo-item/todo-list下面。不過需要稍微注意兩點

    1. 若要建立在額外目錄下,該目錄必須存在才可建立,若目錄不存在請先把目錄建立起來

    2. 產生component時會在/src/app/app.module.ts檔內進行注入動作,但目前會發生import時路徑的斜線反了的問題導致錯誤,因此必須手動修改app.module.ts的內容,麻煩的是每次ng g c產生component時同樣的問題又會繼續發生,希望之後的版本會修正囉。(寫這篇文章時Angular CLI版本為1.0.0-beta.15)

    ng destroy(ng d)

    ng destroy是用來移除ng generate所產生的檔案的,不過只是進行把檔案刪除的動作而已,對於用到產生的物件,還是必須手動在程式碼中清除。

    例如我們使用ng g c todo-item建立一個todi-item的component,但後悔了,就可以使用 ng d component todo-item (目前不支援 ng d c這種寫法)來移除檔案。

    ng build

    當Angular2的程式開發完成,需要部屬到別台機器上時,我們可以使用ng build來打包所有的程式碼,這個步驟會將所有TypeScript的檔案轉譯成JavaScript,同時也會使用Tree Shaking的技術只留下開發時有使用到的相依物件,並將所有程式分類打包,最後產出到專案下的dist目錄,我們就可以將這個目錄部屬到測試或正式環境上執行。另外若是要上線的系統了,還可以使用ng build --prod再將產出的JavaScript做最小化壓縮的動作,以節省下載程式碼的等待時間。如果我們希望在程式有修改時就自動進行build的動作,也可以使用ng build -w來偵測變更並自動執行build。

    Angular CLI使用webpack作為打包程式的工具,有趣的是使用ng new建立的專案找不到webpack.js之類的檔案,這也算是習慣取代配置的好處之一,對於打包程式這件事情我們不用花太多心思,Angular CLI都已經內建好了,只要我們程式撰寫配合通用的習慣,剩下的直接使用別人寫好的範本來跑就好啦!如果想看看Angular CLI預設的webpack程式,可以參考專案目錄下node_modules\angular-cli\tasks下面的檔案。除此之外Angular2官方的webpack介紹也說得非常仔細,建議有時間可以去看看。

    ng serve

    在程式開發階段,我們經常需要打開瀏覽器來觀看程式執行的結果,使用ng serve可以自動幫你把程式打包,並開啟一個live reload的http server,如此一來當我們程式有修改時,就會自動幫你重新build一次,同時如果有用瀏覽器打開目前的程式時,也會通知自動重整,就不用一直按F5重新整理啦!

    ng lint

    使用Angular CLI建立的專案會預設加入一個tslint.json檔案,用來設定TypeScript撰寫風格的相關限制,我們可以自行在tslint.json裡面修改來調整符合團隊開發的規範,若要檢查專案中的程式碼是否符合規範,可以使用 ng lint 來檢查,看看那些檔案中有不符合規則的程式存在。



    ng test & ng e2e

    ng test和ng e2e兩個指令都是用來執行測試程式的,不同的是ng test是屬於unit test的部分,會執行src/app下面所有的測試程式碼,使用的測試套件為karma與jasmine。

    而ng e2e則是用來執行end to end測試,會執行/e2e下面的測試程式,使用的測試套件為karma與protractor。

    如果已經有寫過JavaScript的人對於這些測試程式應該不會太陌生,未來有機會寫到Angular2的測試時,在多介紹一些。

    單元回顧

    本篇文章介紹了Angular CLI的一些常用指令,日後在使用Angular CLI時應該能更加清楚指令的用途與原理,透過Angular CLI可以幫助我們在開發的時候節省很多配置時間。

    官方的文件還有一些小技巧,有興趣的朋友可以去參考看看囉。







    Windows 10 上佈署 Angular4 開發環境

    安裝 nvm-windows

    執行安裝 nvm-setup.exe

    NVM for Windows是一個命令行工具。只需輸入nvm控制台即可獲得幫助。基本命令是:
    • nvm arch [32|64]:顯示節點是運行在32位還是64位模式。指定32或64來覆蓋默認體系結構。
    • nvm install <version> [arch]:該版本可以是node.js版本或最新版本的“最新版本”。(可選)指定是否安裝32位或64位版本(默認為系統arch)。設置[arch]為“全部”以安裝32和64位版本。
    • nvm list [available]:列出node.js安裝。輸入available末尾以顯示可供下載的版本列表。
    • nvm on:啟用node.js版本管理。
    • nvm off:禁用node.js版本管理(不卸載任何東西)。
    • nvm proxy [url]:設置用於下載的代理。[url]空白,以查看當前的代理。設置[url]為“無”刪除代理。
    • nvm uninstall <version>:卸載特定版本。
    • nvm use <version> [arch]:切換到使用指定的版本。可選地指定32 / 64bit架構。nvm use <arch>將繼續使用所選版本,但根據提供的值切換到32/64位模式<arch>
    • nvm root <path>:設置nvm應存儲node.js不同版本的目錄。如果<path>未設置,將顯示當前根。
    • nvm version:顯示目前運行的NVM版本的Windows。
    • nvm node_mirror <node_mirror_url>:設置節點鏡像。中國人可以使用https://npm.taobao.org/mirrors/node/
    • nvm npm_mirror <npm_mirror_url>:設置npm鏡。中國人可以使用https://npm.taobao.org/mirrors/npm/

    C:\Users\wengw>nvm arch
    System Default: 64-bit.
    Currently Configured: -bit.


    C:\Users\wengw>nvm list available

    |   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
    |--------------|--------------|--------------|--------------|
    |    7.10.0    |    6.10.3    |   0.12.18    |   0.11.16    |
    |    7.9.0     |    6.10.2    |   0.12.17    |   0.11.15    |
    |    7.8.0     |    6.10.1    |   0.12.16    |   0.11.14    |
    |    7.7.4     |    6.10.0    |   0.12.15    |   0.11.13    |
    |    7.7.3     |    6.9.5     |   0.12.14    |   0.11.12    |
    |    7.7.2     |    6.9.4     |   0.12.13    |   0.11.11    |
    |    7.7.1     |    6.9.3     |   0.12.12    |   0.11.10    |
    |    7.7.0     |    6.9.2     |   0.12.11    |    0.11.9    |
    |    7.6.0     |    6.9.1     |   0.12.10    |    0.11.8    |
    |    7.5.0     |    6.9.0     |    0.12.9    |    0.11.7    |
    |    7.4.0     |    4.8.3     |    0.12.8    |    0.11.6    |
    |    7.3.0     |    4.8.2     |    0.12.7    |    0.11.5    |
    |    7.2.1     |    4.8.1     |    0.12.6    |    0.11.4    |
    |    7.2.0     |    4.8.0     |    0.12.5    |    0.11.3    |
    |    7.1.0     |    4.7.3     |    0.12.4    |    0.11.2    |
    |    7.0.0     |    4.7.2     |    0.12.3    |    0.11.1    |
    |    5.12.0    |    4.7.1     |    0.12.2    |    0.11.0    |
    |    5.11.1    |    4.7.0     |    0.12.1    |    0.9.12    |
    |    5.11.0    |    4.6.2     |    0.12.0    |    0.9.11    |
    |    5.10.1    |    4.6.1     |   0.10.48    |    0.9.10    |

    This is a partial list. For a complete list, visit https://nodejs.org/download/release




    C:\Users\wengw>nvm root
    Current Root: C:\Users\wengw\AppData\Roaming\nvm

    C:\Users\wengw>nvm version
    1.1.4

    進入目錄
    C:\Users\wengw\AppData\Roaming\nvm
    在 install.cmd 上按右鍵,以系統管理員執行

    C:\Users\wengw>nvm
    出現 Running version 1.1.4. 表示 nvm 安裝成功

    指令快速使用說明
    nvm list:查看已安裝的版本
    nvm list available:查看提供哪些 Node 版本
    nvm install 版本號 (不能有含v):安裝指定的 Node 版本
    nvm use 版本號:指定使用 Node 版本

    C:\Users\wengw>nvm install 6.10.3
    Downloading node.js version 6.10.3 (64-bit)...
    Complete
    Creating C:\Users\wengw\AppData\Roaming\nvm\temp

    Downloading npm version 3.10.10... Complete
    Installing npm v3.10.10...

    Installation complete. If you want to use this version, type

    nvm use 6.10.3

    C:\Users\wengw>nvm on
    nvm enabled
    Now using node v6.10.3 (64-bit)

    ===========================================================
    確認 node.js 版本
    C:\Users\wengw>node -v
    v6.10.3

    下載QuickStart種子

    cd c:\htdocs\quickstart
    npm install
    npm start

    建立一個命令檔
    npmstart_sas.cmd

    內容:
    cd c:\htdocs\sas
    npm start


    CentOS 7 安裝 Docker 容器

    資訊來源:https://www.openfoundry.org/tw/enterprise-application/9349-centos7

    Docker套件的安裝與使用
    CentOS 7.0採用了以Linux Containers技術為基礎的輕量級Docker虛擬化應用。它與許多新手IT所熟悉的虛擬機器(Virtual Machine)是不一樣的。一般的虛擬機器都有各自的虛擬化電腦硬體,來安裝與使用各自獨立的客端作業系統(Guest OS),這種作法相當耗用實體的硬體資源,但其優點是容易部署各式各樣的作業系統,包括了像是Windows、Mac、Linux、FreeBSD等等。

    至於Docker容器(Container)運作的概念,則是共用一個主體的作業系統核心,然後分隔出各自獨立的運行空間,就好像一位房東將一棟房子重新裝潢後,分隔出多間的小套房來出租一樣,雖然都是在同一棟房子之中,但各自的空間卻可以自行擺設所需要的東西。採用這種容器虛擬化技術的優點,就在於可節省掉許多硬體資源,但缺點就是這一些分支出去的容器,只能夠使用相同的作業系統核心,簡單來說就是您無法在CentOS 7.0的Docker虛擬化環境中,建立與使用Windows、Mac等不屬於Linux核心的容器。

    關於在CentOS 7.0下安裝Docker服務的方法,只要像如圖下達sudo yum install docker即可。目前最新的版本為1.3.2。


    ▲圖 安裝docker套件

    完成docker套件的安裝之後,請下達systemctl start docker命令來啟動它即可。至於如果希望每一次CentOS系統啟動時自動執行,請如圖50所示下達systemctl enable docker命令。

    啟用docker服務

    對於目前執行中的docker完整版本資訊檢視,請如圖51所示下達docker version即可,其內容包括了用戶端版本、用戶端API版本、伺服端版本、伺服端API版本等資訊

    查看docker版本資訊

    確認docker服務正在執行之中,便可以開始來下載與安裝所需要的容器映像檔,以取得最新版本的CentOS映象檔來說,只要下達sudo docker pull centos即可,如果是Ubuntu Linux的映象檔,請如圖52所示下達sudo docker pull ubuntu命令。如果Fedoa Linux映象檔,則可以下達sudo docker pull fedora。

    安裝映像檔

    關於映象檔的下載安裝,您可以先行線上的搜尋結果後,再來決定所要安裝的映象檔名稱。以Ubuntu Linux系列的映象檔來說,您就可以下達docker search ubuntu,便可以像如圖53所示一樣,找到所有以Ubuntu系列為主的Linux映象檔。其中凡是有標示為OfficialTrusted字眼的映象檔,皆是您最佳的選擇。

    搜尋Ubuntu系列映像檔

    如果您想要知道目前已下載安裝的映象檔有哪一些,只要下達docker images命令即可,範例中便可以看到目前有關Ubuntu的映象檔共有五個,而Fedora則有兩個。進一步您可以下達docker info命令,來得知目前Docker中容器的數量、映象檔數量、集區的區塊配置大小、資料檔位置、中繼資料檔位置、資料已使用的空間大小、資料可用的總空間大小、中繼資料已使用的空間大小、中繼資料可用的總空間大小、程式庫版本資訊、Linux核心的版本資訊以及目前的CentOS版本資訊等等。

    查看目前映像檔資訊

    接下來您可以嘗試在某一指定的容器中執行命令,例如您可以下達docker run Ubuntu:latest ls –l命令,便可以像如圖55所示一樣,檢視到目前Ubuntu容器中的目錄清單。另一個例子是執行docker run centos:latest cat /etc/centos-release,便可以察看到目前這個CentOS容器的系統版本資訊。

    執行docker命令

    當您想要知道在目前的Docker服務之中執行過了哪一些命令,只要像如圖56所示一樣下達docker ps –a命令,即可查詢到曾經在哪一個容器之中執行過什麼命令參數。

    查看docker執行過的命令

    我們除了能夠將Docker指定的命令參數,執行在某一個容器的終端機命令列之中,也可以選擇先進入到該容器之後,再對於該容器中的Linux系統進行管理。如圖57所示筆者以docker run -i –t ubuntu:latest /bin/bash來進入到此容器的終端機提示列下,然後下達lsb_release –a命令參數來查看目前所在容器的系統版本資訊。另外在此還可以看到每一個container都有一個唯一的ID,來顯示在root@字元提示之後。若是想要離開目前的容器,只要下達exit命令或是按下Ctrl+D按鍵即可。

    進入容器終端機

    既然我們可以使用Docker的命令來進入到任一個容器的作業系統之中,那麼肯定也可以執行許多該系統所提供的命令工具,或是在該系統之中安裝各類軟體套件。如此一來不就可以讓不同的伺服器服務分散運作在不同的容器之中。如圖58所示便是筆者下達一個最常用的ifconfig命令,來查看目前這個容器系統的預設IP位址配置。

    查看容器網路配置

    接下來就讓我們來嘗試在這個Ubuntu Linux的容器之中,下載安裝一個Apache2的網站服務套件吧。請如圖59所示下達apt-get install apache2即可。

    在容器中安裝Apache2套件

    成功完成Apache2套件的安裝之後,便可以先下達service apache2 status來查看此網站服務的執行狀態,如果尚未啟動就請下達service apache2 start來執行它即可。

    啟動容器的網站服務

    成功安裝與啟動Ubuntu Linux的Apache網站服務之後,我們便可以回到CentOS主機的桌面中,開啟瀏覽器來嘗試連線此容器的網站服務。如圖61所示便是Apache2 Ubuntu網站服務預設的首頁。

    連線容器的Apache網站

    關於CentOS 7.0於虛擬化平台的部署,您除了可以選擇將它安裝在以KVM、VirtualBox、Xen、XenServer以及VMware為主的相關虛擬機器之外,同樣也可以將它安裝在Windows Server 2012 R2、Windows 8.1企業版(專業版)或是免費的Hyper-v 2012 R2的Hyper-v虛擬機器之中。如圖所示便是一個CentOS 7.0虛擬機器,正運行於Hyper-v 3.0 R2平台的範例,由於它已支援Hyper-v的動態記憶體配置技術,因此可讓整體資源的使用率最大化。

     將CentOS部署在Hyper-v

    CentOS 7 常用指令

    加入帳號到群組

    在 Linux 要加入帳號到現有群組,可以用 useradd 及 usermod 指令實現。useradd 在建立帳號時修改預設值,可以將帳號加到現有群組;而 usermod 就可以用作修改帳號設定,其中一樣是加入帳號加到現有群組。Linux 的群組分別有 Primary group (主要群組)及 Secondary group (額外群組)。

    useradd 新增帳號時加入到現有群組,只要在 useradd 加上 -G [group-name] 就可以,例如我建立一個帳號為 phpini, 並加入 devgroup 群組,指令是這樣:

    如果 getgroup 不存在,先用 groupadd 建立:

    # groupadd gitgroup
    然後可以用 useradd 建立帳號:
    # useradd -G gitgroup wengxxxxx

    如果想將帳號 wengxxxxx 的 Primary group 改為 gitgroup, 只要將 -G 改成 -g
    # useradd -g gitgroup wengxxxxx

    usermod 的用法跟 useradd 差不多,主要分別是 usermod 是變更帳號現有的設定,將現有帳號加入現有群組。例如將 wengxxxxx 加入 getgroup 群組,指令是這樣:

    # usermod -a -G gitgroup wengxxxxx

    以下是變更 wengxxxxx 帳號的 Primary group 到 gitproup
    # usermod -G gitgroup wengxxxxx

    ========================================================================
    完成docker套件的安裝之後
    請下達 # systemctl start docker 命令來啟動它即可。
    至於如果希望每一次CentOS系統啟動時自動執行,
    請下達# systemctl enable docker 命令。

    ========================================================================
    下面資料來源:http://linux.vbird.org/linux_basic/0210filepermission.php

    如何改變檔案屬性與權限

    我們現在知道檔案權限對於一個系統的安全重要性了,也知道檔案的權限對於使用者與群組的相關性, 那麼如何修改一個檔案的屬性與權限呢?又!有多少檔案的權限我們可以修改呢? 其實一個檔案的屬性與權限有很多!我們先介紹幾個常用於群組、擁有者、各種身份的權限之修改的指令,如下所示:
    • chgrp :改變檔案所屬群組
    • chown :改變檔案擁有者
    • chmod :改變檔案的權限, SUID, SGID, SBIT等等的特性
    #dir -l

    drwx------.  6 git         git              143  5月 24 08:52 git

    # chgrp -R gitgroup ./git

    #dir -l

    drwx------.  6 git         gitgroup     143  5月 24 08:52 git

    # chmod -R 770 ./git
    # dir -l
    drwxrwx---.  6 git       gitgroup     143  5月 24 08:52 git


    =======================================================================
    • 改變權限, chmod
    檔案權限的改變使用的是chmod這個指令,但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
    • 數字類型改變檔案權限

      Linux檔案的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限, 先複習一下剛剛上面提到的資料:檔案的權限字元為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:
      r:4
      w:2
      x:1
      每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:
      owner = rwx = 4+2+1 = 7
      group = rwx = 4+2+1 = 7
      others= --- = 0+0+0 = 0
      所以等一下我們設定權限的變更時,該檔案的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:
      [root@study ~]# chmod [-R] xyz 檔案或目錄
      選項與參數:
      xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。
      -R : 進行遞迴(recursive)的持續變更,亦即連同次目錄下的所有檔案都會變更
      
      舉例來說,如果要將.bashrc這個檔案所有的權限都設定啟用,那麼就下達:
      [root@study ~]# ls -al .bashrc
      -rw-r--r--. 1 root root 176 Dec 29  2013 .bashrc
      [root@study ~]# chmod 777 .bashrc
      [root@study ~]# ls -al .bashrc
      -rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc
      
      那如果要將權限變成『 -rwxr-xr-- 』呢?那麼權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754 囉!所以你需要下達『 chmod 754 filename』。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們以vim編輯一個shell的文字批次檔後,他的權限通常是 -rw-rw-r-- 也就是664, 如果要將該檔案變成可執行檔,並且不要讓其他人修改此一檔案的話, 那麼就需要-rwxr-xr-x這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令囉!

      另外,如果有些檔案你不希望被其他人看到,那麼應該將檔案的權限設定為例如:『-rwxr-----』,那就下達『 chmod 740 filename 』吧!

      例題:
      將剛剛你的.bashrc這個檔案的權限修改回-rw-r--r--的情況吧!
      答:
      -rw-r--r--的分數是644,所以指令為:
      chmod 644 .bashrc
    • 符號類型改變檔案權限

      還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那麼我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成r, w, x囉!也就是可以使用底下的方式來看:

      chmodu
      g
      o
      a
      +(加入)
      -(除去)
      =(設定)
      r
      w
      x
      檔案或目錄

      來實作一下吧!假如我們要『設定』一個檔案的權限成為『-rwxr-xr-x』時,基本上就是:

      • user (u):具有可讀、可寫、可執行的權限;
      • group 與 others (g/o):具有可讀與執行的權限。

      所以就是:
      [root@study ~]# chmod  u=rwx,go=rx  .bashrc
      # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空白字元!
      [root@study ~]# ls -al .bashrc
      -rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc
      
      那麼假如是『 -rwxr-xr-- 』這樣的權限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的檔案屬性,而我只想要增加.bashrc這個檔案的每個人均可寫入的權限, 那麼我就可以使用:
      [root@study ~]# ls -al .bashrc
      -rwxr-xr-x. 1 root root 176 Dec 29  2013 .bashrc
      [root@study ~]# chmod  a+w  .bashrc
      [root@study ~]# ls -al .bashrc
      -rwxrwxrwx. 1 root root 176 Dec 29  2013 .bashrc
      
      而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:
      [root@study ~]# chmod  a-x  .bashrc
      [root@study ~]# ls -al .bashrc
      -rw-rw-rw-. 1 root root 176 Dec 29  2013 .bashrc
      [root@study ~]# chmod 644 .bashrc  # 測試完畢得要改回來喔!
      
      知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』, 例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限囉! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程式可以擁有執行的權限, 但你又不知道該檔案原本的權限為何,此時,利用『chmod a+x filename』 ,就可以讓該程式擁有執行的權限了。是否很方便?

    ========================================================================
    nano
    pwd 取得目前目錄名稱(有可能是連結)
    pwd –P 取得正確的目錄名稱
    cd
    yum
    rm
    mkdir
    cp
    tail
    vi
    vim
    systemctl (start/restart/stop)
    firewall-cmd
    firewall-cmd --permanent --zone=public --add-port=389/tcp
    firewall-cmd --reload
    wget
    unzip
    chown

    rpm -qa |grep 'openldap*'
    find / | grep slapd.conf

    2017年5月23日 星期二

    CentOS7 查看 Port 占用情況

    幾種 CentOS7 查看 Port 被程式佔用的方法

    1.netstat 指令
    # netstat -tln 可以看到有哪些 IP:Port 開啟
    $ netstat -tulpn | grep LISTEN  查詢 port 80 的語法:

    $ netstat -tulpn | grep :80



    2.lsof 指令

    RHEL 及 CentOS 預設沒有安裝 lsof, 執行以下指令用 yum 安裝

    # yum install lsof
    安裝好後, 使用方法如下:

    # lsof -i -P -n | grep LISTEN
    要查看某一個 port 是否被佔用, 在 grep 後面加上 port 即可:

    $ lsof -i -P -n | grep :80

    3. nmap 指令

    RHEL 及 CentOS 預設沒有安裝 nmap, 執行以下指令用 yum 安裝:

    # yum install nmap
    安裝好後, 使用方法如下:

    # nmap -sT -O localhost
    輸出類似這樣的結果:

    Nmap scan report for localhost (127.0.0.1)
    Host is up (0.00012s latency).
    Other addresses for localhost (not scanned): 127.0.0.1
    Not shown: 999 closed ports
    PORT STATE SERVICE
    3325/tcp   open  smtp
    3380/tcp   open  http
    1111/tcp  open  rpcbind
    3389/tcp  open  ldap
    3443/tcp  open  https
    3631/tcp  open  ipp
    33306/tcp open  mysql
    33389/tcp open  ms-wbt-server

    安裝 windows 10 版的 Git

    Git 網址:https://git-scm.com/download/win
    下載64位元版的

    直接安裝

    顯示版本
    c:\>git --version
    git version 2.13.0.windows.1

    安裝 TortoiseGit
    網址:https://tortoisegit.org/
    下載 64位元檔案
    下載中文化套件

    帳號與email,必須輸入,那是版控重要資訊。

    於 c:\htdocs\sas> 按滑鼠右鍵

    Git 提交 master
    Git 同步
    Git 推送
    Git 獲取
    Git 拉取

    Windows 10 使用 nvm-windows 管理 node.js 版本

    利用 nvm-windows 更新 node.js 版本

    nvm-windows:https://github.com/coreybutler/nvm-windows

    到 releases 下載 nvm-setup.zip

    安裝 nvm-setup.exe

    到安裝目錄 C:\Users\wengw\AppData\Roaming\nvm

    在檔案 install.cmd 按滑鼠右鍵,以系統管理員身分執行,按 Enter 後,會出現3行,即開啟一個文字檔就可以了。

    接下來開啟命令列視窗

    執行 c:\>nvm on  (啟用 node.js 版本管理)

    命令是:nvm

    nvm arch:
      顯示節點是運行在32位還是64位模式。
    nvm install <version> [arch]:
      該版本可以是node.js版本,也可以是最新版本的“最新版本”。
      (可選)指定是否安裝32位或64位版本(默認為系統arch)。
      將[arch]設置為“全部”以安裝32和64位版本。
      在此命令的末尾添加--insecure以繞過遠程下載服務器的SSL驗證。
    nvm list [可用]:
      列出node.js安裝。在末尾輸入“可用”,看看可以安裝什麼。別名為ls。
    nvm on:
      啟用node.js版本管理。
    nvm off:
      禁用node.js版本管理。
    nvm proxy [url]:
      設置用於下載的代理。將[url]留空以查看當前代理。
                                     將[url]設置為“none”以刪除代理。
    nvm node_mirror [url]:
      設置節點鏡像。默認為https://nodejs.org/dist/。將[url]留空以使用默認網址。
    nvm npm_mirror [url]:
      設置npm鏡像。默認為https://github.com/npm/npm/archive/。將[url]留空到默認網址。
    nvm uninstall <version>:
      版本必須是特定版本。
    nvm使用[version] [arch]:
      切換到使用指定的版本。可選地指定32 / 64bit架構。
      nvm使用<arch>將繼續使用所選版本,但切換到32/64位模式。
    nvm root [path]:
      設置nvm應存儲node.js不同版本的目錄。
      如果未設置<path>,將顯示當前根。
    nvm version:
      顯示Windows的當前運行的nvm版本。別人為v

    ========================================================================
    使用 nvm 安裝 node.js 會少了一個 nodevars.bat 批次檔
    可以把下面指令存成批次檔,並放在安裝目錄 C:\Users\wengw\AppData\Roaming\nvm\各版本

    檔名:nodevars.bat
    內容:
    @echo off

    rem Ensure this Node.js and npm are first in the PATH
    set "PATH=%APPDATA%\npm;%~dp0;%PATH%"

    setlocal enabledelayedexpansion
    pushd "%~dp0"

    rem Figure out the Node.js version.
    set print_version=.\node.exe -p -e "process.versions.node + ' (' + process.arch + ')'"
    for /F "usebackq delims=" %%v in (`%print_version%`) do set version=%%v

    rem Print message.
    if exist npm.cmd (
      echo Your environment has been set up for using Node.js !version! and npm.
    ) else (
      echo Your environment has been set up for using Node.js !version!.
    )

    popd
    endlocal

    rem If we're in the Node.js directory, change to the user's home dir.
    if "%CD%\"=="%~dp0" cd /d "%HOMEDRIVE%%HOMEPATH%"
    ******結束******

    在桌面上建立[命令提示字元]捷徑
    捷徑名稱:Node.js command prompt

    目標:C:\Windows\System32\cmd.exe /k "C:\Program Files\nodejs\nodevars.bat"
    開始位置:"C:\Program Files\nodejs"

    記得先下指令:

    nvm on
    就會建立捷徑 C:\Program Files\nodejs 映射到 C:\Users\wengw\AppData\Roaming\nvm\各版本
    並且把裡面 node64.exe 的檔案更名為 node.exe

    更新 npm 到 5.03版

    >npm install npm@latest -g

    確認

    >npm -v
    5.0.3

    ========================================================================





    excel 資料轉成 ldif 格式

    table 2:(虛擬資料)
    userid username pwd
    1XXXXXX7 吳鳳 2db22x01e5375ad4dc027abbc256231c

    table 1:
    C2=="dn: cn="&A2&D$2&B2&E$2&MID(B2,1,1)&F$2
    **********************************************************
    A2     B2   C2
    1XXXXXX7 吳鳳 dn: cn=1XXXXXX7,ou=user,ou=login,dc=nttu,dc=edu,dc=tw
    cn: 吳鳳
    objectclass: inetOrgPerson
    objectclass: top
    objectclass: person
    sn: 吳
    userpassword: {SSHA}exxxxxxxxxxxxxxxxxxxxxxxxxxxxG/s

    D2                   E2

    ,ou=user,ou=login,dc=nttu,dc=edu,dc=tw
    cn: 

    objectclass: inetOrgPerson
    objectclass: top
    objectclass: person
    sn: 

    F2


    userpassword: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxx/s

    **********************************************************
    1.複製A2~Axxxxx
    2.貼到 notepad++中
    3.利用搜尋 # 取代 (無) ~消掉 #

    注意事項,每筆資料都要空一行,空行不能有空白資料,最後一行空行要刪除
    參數與值中間要空一格(參數: 值)

    cn: (帳號,不能為空值)
    objectclass: inetOrgPerson (必備)
    objectclass: top (必備)
    objectclass: person (必備)
    sn: (姓,不能為空值)
    givenName: (名子,不能為空值)






    CentOS 7 安裝新版 Git 2.13.0

    Git:
      網址:https://github.com/git/git
      最新版本:https://github.com/git/git/releases (目前最新為 2.13.0)

    經網路上查詢,發現 yum 的 Git 版本只有到 1.8.3.1,經安裝也確是如此,經網路上教學手動安裝,安裝過程做下列紀錄,方便以後查詢!^_^

    目前 Git 官方已經更新到 2.13.0 ,所以移除原先 yum 安裝的1.8.3.1 版,手動下載 2.13.0 版,並安裝編譯。

    1. 查看 yum 的 Git 信息:

    # yum info git

    2. 編譯依賴套件安裝

    # yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    # yum install  gcc perl-ExtUtils-MakeMaker

    3. 移除已安裝低版本的 Git

    利用:git –-version 查看系統帶的版本,Git 版本是: 1.8.3.1,所以先要卸载低版本的 Git:

    # yum remove git

    4. 下载新版的 Git 原始碼包

    # wget https://github.com/git/git/archive/v2.13.0.tar.gz
    也可以離線下載,再傳到 CentOS7 系统中指定的目錄下面。

    5. 解壓縮到指定的目錄 (git-2.13.0)

    # tar -xzvf v2.13.0.tar.gz

    6. 安裝 Git

    分別執行以下命令進行編譯安裝,編譯過程有點久,要耐心等候完成。

    # cd git-2.13.0
    # make prefix=/usr/local/git all
    # make prefix=/usr/local/git install

    7. 添加到環境變數

    # echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
    # source /etc/bashrc # 立刻生效

    8. 檢查 Git 版本號碼

    # git --version
    git version 2.13.0
    安裝到這裡,目前 CentOS7 已經安裝上了最新的 Git 版本。

    2017年5月19日 星期五

    設定 visual studio code 的 angular 4 開發環境(TypeScript)

    調整開發方向
    語言:
    TypeScript
    angular 4
    node.js (npm)
    HTML5
    CSS3

    編輯器:
    Visual Studio Code

    安裝開發環境
    1.下載並安裝 node.js
      https://nodejs.org/en/
      下載 穩定正式版 v6.10.3 LTS

    2.下載並安裝 Visual Studio Code
      https://code.visualstudio.com/
      版本更新很快,下載最新的版本即可
      
    3.下載並安裝 Angular 4.0
      https://angular.io/
      GET STARTED => QuickStart seed => download => Download the QuickStart seed
      下載後的檔名為:quickstart-master.zip

    解壓縮 quickstart-master.zip 到 c:\htdocs\quickstart

    開啟 Node.js command prompt

    >cd\ c:\htdocs\quickstart
    >npm install
    >npm start

    開啟 Visual Studio Code 編輯器
    開啟 c:\htdocs\quickstart\quickstart 資料夾

    首頁資料在 \src\app\app.component.ts
    設定資料在 \src\app\app.module.ts



    src
    app
    app.component.ts
    app.module.ts
    main.ts
    src\app\app.component.ts
    import { Component } from '@angular/core';
    
    @Component({
      selector: 'my-app',
      template: `<h1>Hello {{name}}</h1>`
    })
    export class AppComponent { name = 'Angular'; }
    src\app\app.module.ts
    import { NgModule }      from '@angular/core';
    import { BrowserModule } from '@angular/platform-browser';
    import { AppComponent }  from './app.component';
    
    @NgModule({
      imports:      [ BrowserModule ],
      declarations: [ AppComponent ],
      bootstrap:    [ AppComponent ]
    })
    export class AppModule { }
    src\main.ts
    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    import { AppModule }              from './app/app.module';
    
    platformBrowserDynamic().bootstrapModule(AppModule);


    ===========================================================
    Visual Studio Code 編輯器,增加擴充模組 (Ctrl + P)

    Angular v4 TypeScript Snippets
      https://marketplace.visualstudio.com/items?itemName=johnpapa.Angular2

    Angular 4 and TypeScript/HTML VS Code Snippets
      https://marketplace.visualstudio.com/items?itemName=danwahlin.angular2-snippets
      ext install angular2-snippets

    Bracket Pair Colorizer (支架顏色)
      https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer
      ext install bracket-pair-colorizer

    IntelliSense for CSS class names (適用於使用項目的可用類名快速裝飾HTML。不幸的是,類名稱沒有作用於組件的文件夾。)
      https://marketplace.visualstudio.com/items?itemName=Zignd.html-css-class-completion
      ext install html-css-class-completion

    Angular 2 TypeScript Emmet (如果你還沒有學到Emmet,那絕對是你的腰帶。此插件允許您直接在組件模板中使用語法。)
      https://marketplace.visualstudio.com/items?itemName=jakethashi.vscode-angular2-emmet
      ext install vscode-angular2-emmet

    angular2-inline(模板中為CSS和HTML提供語法高亮。)
      https://marketplace.visualstudio.com/items?itemName=natewallace.angular2-inline
      ext install angular2-inline

    angular2-switcher
    通過三個簡單的鍵綁定快速切換組件,模板和样式。
    還支持通過在光標變量時按F12來定義模板變量。
      https://marketplace.visualstudio.com/items?itemName=infinity1207.angular2-switcher
      ext install angular2-switcher

    vscode-icons
    最好的圖標包在那裡!特徵用於管道,指令,組件,模塊,路由和服務的角色特定圖標。美化文件瀏覽器!:)
      https://marketplace.visualstudio.com/items?itemName=robertohuertasm.vscode-icons
      ext install vscode-icons

    TSLint
    如果你不要打印TypeScript,你應該開始,特別是在codelyzer。這個插件讓你看起來很簡單,看看你的TypeScript代碼中的問題。甚至提供自動修復!
      https://marketplace.visualstudio.com/items?itemName=eg2.tslint
      ext install tslint

    Angular 2+ Snippets - TypeScript, Html, ngRx, Angular Flex Layout & Testing
    這是我見過的最全面的片段包。它具有67個不同的片段。
      https://marketplace.visualstudio.com/items?itemName=Mikael.Angular-BeastCode
      ext install Angular-BeastCode

    TypeScript Hero
    此插件管理導入語句,並可以自動導入缺少的依賴項。可以組織和排序導入。
      https://marketplace.visualstudio.com/items?itemName=rbbit.typescript-hero
      ext install typescript-hero

    Path Intellisense
    如果有一個插件,你添加確保它是這個。此插件啟用自動完成文件路徑,這在處理導入語句時提供了巨大的提升。
      https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense
      ext install path-intellisense