2015年11月24日 星期二

千金買房,萬金買鄰 -- 選擇跟您一起上課的「同學」,是很重要的!

千金買房,萬金買鄰 -- 選擇跟您一起上課的「同學」,是很重要的!
  
今天看見一位前輩的感慨


以我為例,我這十八年來教的課程 
  • 在學校時,底下的學員是國中小老師。他們都有一定的水準,至少「態度」有拿出來。
  •  
  • 到了資策會,因為學費很貴!所以學員來上課,很拼命!
  •  
  • 包含我自己「自辦」的課程,學員都是一時之選
 因為自己花了錢,心會痛!一定會認真上課! 
 
出社會久了,也教過政府補助的課程,所謂的免費課程、失業者課程..... 
或許這句話很傷人, 
但幾位老師、單位承辦人員討論起來,結論都很類似 
那就是「可憐之人,必有可恨之處
 
  這些「免費」上課、只是為了拿補助的學員,有不少人的「態度」是不OK的
  或許他們只是一小部分,但他們的離譜表現,總是讓人印象深刻
我也不方便講些什麼。
  
但是,我想說:一個老師站在台上,除了鐘點費以外
      我更想看到學員們「恍然大悟」的表情 
      這比「鐘點費」還要寶貴!
   
我到現在還為了人情,願意支援幾個單位,到外地上課
 如果以鐘點費來算,我真的是賠錢作、倒貼自己的錢去上課了
 但,比較一下,學員連上課 "準時",都做不到......夫復何言?
  
看到其他前輩也有這樣的困擾 
讓我想起前一陣子台北市長柯P說的一句話「合法,卻不合理」
 
這些來混的人,或許資格、規矩(法條)都符合
但隔壁的學員(同班同學)、臺上的老師又是怎麼看您呢?
 
 千金買房,萬金買鄰
一旦你身邊有惡鄰居,就算你住「帝寶」也高興不起來
 上課難道不是嗎?
 
當上課的學員,程度參差不齊
    當學員的求知決心,高低落差很大
        當同班同學的「態度」錯了,我不相信您不會置身事外?您必然受到影響
 
 當學員(整體)聽不懂的時候,老師只能重複、再重複
只能放棄進度,拉齊大家的整體水平
 
當學員來上課的時候,以為你的課是要教人「開一個網路商城來賣東西」,你跟他講程式、資料庫、ASP.NET....
只是鏡花水月
 
當學員上課幾次以後,連上課用哪套軟體都不清楚,不會開的時候......
 
當學員上完課以後,發問的問題,是第一天你就再三叮囑、警告過的
你會覺得你心都冷了
 
還有自稱為「粉絲」,每堂由你上的免費課程都搶著報名、卡位
但上課永遠在度估(打瞌睡)、心不在焉、遲到早退的 
(你真的不要來,把位置讓出來)   
============================================== 
 
我上課也會提這個案例(這種說法)。
有位朋友在宗教團體練氣功,邀請我去。我很驚訝的是入會費就要五萬多,還要繳月費......
 
朋友的說法很有趣,他說
「免費練功,不痛不癢。對方也沒有動力來,三天曬網 兩天捕魚,學不會 還反過來怪你」
 「如果要繳費,就跟上健身房一樣。你會"逼"自己來,"逼"自己努力做,自然有成效。」
  
準備考試時,為什麼要去K書中心、圖書館看書? 
      唯有逼自己轉換環境,才能有所得。NO Pain, No Gain 就是這樣的道理。
  
不 "逼"自己每次早上九點上課,在家睡懶覺,說能學好什麼技巧?鬼才相信。
       不能克服自己的怠惰,什麼都別提了 :-(
  
若真的是人中龍鳳,早就自己買書自修練成功啦!一萬人之中,有幾位能這樣做?
 還是多 "Push"自己、多"逼"自己前進吧....NO Pain, No Gain 就是這樣的道理。
==============================================
   
您當然可以繼續上免費課程、政府補助課程
這絕對OK的。
 
但我希望每一位到這種課程上課的老師、學員,我們都盡力表現出自己最好的一面
 上課時,課程後......都沒有遺憾
  
 
相關文章:


沒有求勝的意志!什麼規劃、什麼訓練步驟都沒有用!
沒有學習的決心!什麼課程、什麼老師來教都沒有用!

 
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
......... 寫信給我,mis2000lab (at) yahoo.com.台灣 .....................................................................................
................   facebook社團   https://www.facebook.com/mis2000lab   ............................
................   Google+   https://plus.google.com/100202398389206570368/posts ..............
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

[中文翻譯] ASP.NET 5 簡介(Introducing ASP.NET 5,原作ScottGu 2015/2/23)

以下中文翻譯如果有不明確的地方,建議以原文為準。圖片也來自原文網站。
如果您需要引用,請註明中文譯者:MIS2000 Lab.,並保留URL超連結到本文章
===================================================================================
ASP.NET 5 簡介(Introducing ASP.NET 5,原作ScottGu)
原作發表時間:2015/2/23
 
大約十五年前,ASP.NET 1.0的第一個預覽版(Preview)現身了。自此數百萬開發人員用它來建立與執行各種偉大的Web應用程式,經過這麼多年,我們在上面增加和進化很多很多的功能。
 我(原文作者ScottGu)很高興在2015/2/23這天發布最新的ASP.NET版本,名為ASP.NET 5。這個新版本是我們對ASP.NET作過最顯著的架構更新之一。在這次釋出的版本中,我們讓ASP.NET更精簡、模組化、跨平台與雲端的最佳化。本次的ASP.NET 5預覽版(Preview),您可以透過下載(http://go.microsoft.com/fwlink/?LinkId=521794)最新版Visual Stduio 2015 CTP來使用它。(譯者註解:2015/2/23為VS 2015 CTP 6)
 ASP.NET 5是一個開源(開放原始碼)的web framework,可以用來開發和執行在Windows、Linux和Mac不同作業系統上的新Web應用程式。它包括MVC 6 framework,當下也結合了MVC和Web API的功能到一個single web programming framework裡面。ASP.NET 5也將是SignalR 3的基礎,讓您可以加入即時的功能(real time functionality)到雲端的應用程式裡面。ASP.NET 5是建立在.NET Core runtime,但它也可以在完整的(full).NET framework上運作以達到最大的(向下)相容性。(譯者註解:.NET開放原始碼的專案列表,請看 http://www.dotnetfoundation.org/projects
 在ASP.NET 5之中,我們正在做一系列的架構變化,藉此讓core web framework更加精簡(舉例來說,您再也不需要用到System.Web.dll了)、更加模組化(幾乎所有功能都可以藉由NuGet模組最佳化您的應用程式)。ASP.NET 5讓您獲得下列改進:
  • 建構與執行在Windows、Mac和Linux上的跨平台ASP.NET
  • 基於.NET Core,支援了side-by-side的app versioning(譯者註解:.NET Core支援不同應用程式使用各自獨立的runtime,版本互不干擾)
  • 新工具,讓新的Web開發更加簡化。
  • Single aligned web stack for Web UI和Web APIs。
  • 為雲端環境而建、即時可用的設定(Cloud-ready environment-based configuration)。
  • 整合了創建和使用的NuGet軟體套件。
  • 內建對於DI(dependency injection)的支援。
  • 可以在IIS上建構主機,或是在自己的程序上自訂Host(Ability to host on IIS or self-host in your own process)。
 ASP.NET終究會讓您覺得更熟悉,也更方便調校新一代的Web開發作業。
  
更具彈性、跨平台Runtime
 ASP.NET 5有兩種runtime環境,讓您在選擇應用程式的主機時更具彈性。這兩種runtime選擇如下: 
 .NET Core -- 一個新的、模組化、跨平台的runtime而且體積更小了。當您鎖定.NET Core您就可以用到許多令人興奮的優點:
1). 您可以部署「專屬的」.NET Core runtime在您的應用程式上,如此一來你的應用程式將會執行與部署在這套您「專屬的」runtime版本上,而不是跟主機上作業系統所安裝的那套runtime綁死在一起。您的runtime版本可對應不同的應用程式side-by-side地運作(譯者註解:不同應用程式的runtime可以各自獨立)。必要時,您可以更新runtime而不會影響到其他應用程式,或是說,您也可以繼續運作現有的版本,不會因為其他應用程式修改runtime而對您造成影響。如此一來,在同一系統(主機)上進行應用程式部屬、架構更新時,會更加簡單、更加單純而不會干擾到其他應用程式的運作。
 2). 您的應用程式只會用到自己需要的功能(譯者註解:用多少就裝多少)。因此,您永遠不會被系統提醒「該去更新那些您沒用到的runtime功能」了。從此再也不用曠日廢時地測試、部屬那些「跟自己應用程式無關」的系統更新。
 3). 您的應用程式現在可以跨平台運作。我們將提供Windows、Linux和Mac OS X系統上都能運作的跨平台.NET Core版本。無論使用哪種作業系統來開發或是部屬,您都可以使用.NET。雖然跨平台的.NET版本尚未發布,但我們正努力在GitHub上工作並且計畫早日提供正式的預覽版給大家。
 譯者註解:另一篇文章提到「當然這樣的改變,變成這些 app 用到的 framework 必須是為 .NET Core 來撰寫,所以不是所有現有的函式庫(尤其是社群或第三方開發)都能在 .NET Core 上運作,這會是一次生態系的大變革。」....詳見全文  http://blogs.msdn.com/b/msdntaiwan/archive/2015/02/04/net-core-clr.aspx
  
.NET Framewrok -- 上述.NET Core的API相較於完整版的.NET Framework,其功能較為受限(較少),因此您可能需要修改現行的應用程式才能用於.NET Core上頭。如果您不希望修改應用程式就能直接運作,也可以在”完整版”的.NET Framework上(4.5.2版或是後續新版)運行ASP.NET 5應用程式。如此一來,您就可以存取完整的.NET Framework APIs了,您現行的應用程式與函式庫不需任何修改就能直接在runtime上運作。 
譯者註解:您可以到這個網站,看看幾張圖片,就能理解上文提到 .NET Core 與 完整版(Fully)的差異
 
 MVC 6 -- 一個大一統的程式設計模組
 MVC、Web API與Web Pages提供了互補的功能,因此在開發一套解決方案時通常會共用(譯者註解:Web Pages是使用Razor語法撰寫的網頁程式,跟ASP.NET Web Form不同)。然而在先前的ASP.NET版本中,這些程式設計的框架(framework)各自實施,因此包含一些重複和不一致之處。在MVC 6裡面,我們合併這些模組到單一的程式設計模組裡面。現在,您可以創建一個單一的Web應用程式並用它處理Web UI與資料服務,而不需要調整程式設計裡面的框架(framework)差異。您更可以把一開始用Web Pages寫成的網站無縫地融入更強大的MVC應用程式裡面。
 您可以從同一個controller裡面傳回Razor view與content-negotiated data,並使用相同的MVC filter pipeline來實作。
 除了統合了現有的框架,我們還增加了新的功能讓Server端的Web開發更加簡化,例如增加了很多新的tag helper幫助大家撰寫程式、畫面。這些tag helper讓您在view畫面中使用HTML helper更加得心應手。
 以前可能要寫成這樣:
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

    
      @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
    
       @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })
現在可以改寫成這樣:
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
    <label asp-for="UserName" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
</div>
  
Tag Helper能讓您寫的view畫面更自然、可讀性更高。也可以用來自訂HTML helper的輸出,額外加入其他HTML編輯器的完整特性。
 想要瞭解更多建立MVC 6應用程式的範例,可以參閱 http://www.asp.net/vnext/overview/aspnet-vnext
 
 新的Web開發
 本次(2015/2/23)釋出的ASP.NET 5 預覽版也包含許多有趣的特點,讓您能夠建構更好的 Web應用程式:
 動態發展(Dynamic Development)
 在Visual Studio 2015裡面,我們從動態編譯的優點裡,企圖讓開發經驗更加流暢。您再也不用每次小改變時就得重新編譯一次,如下圖,只要:(1). 編輯程式碼,(2). 存檔,(3). 直接刷新(refresh)瀏覽器,(4). 就能自動看到您剛剛的修改成果。
 image
 盡情享受您的開發經驗吧!如同撰寫直譯式語法一般,卻能享有編譯式語法的優勢。
 您也可以選擇其他的程式碼編輯器來完成你的ASP.NET 5專案。Visual Studio使用者界面中的每一個功能都可以對應跨平台的命令行(Command-line)操作(譯者註解:也可以透過輸入指令碼來達成)。
  
與流行的Web開發工具整合(如Bower、Grunt與Gulp)
 另一個令人開心的功能是Visual Studio 2015本身即支援了Bower、Grunt與Gulp這些廣受歡迎的開放原始碼(開源)工具,我們認為應該將它們包含在開發工具裡面。
 Bower是一個用於用戶端(Client-side)的函式庫管理工具,包含了JavaScript與CSS函式庫。
  • Grunt與Gulp是task runner,用來協助您自動化Web開發流程。您可以使用他們來編譯LESS、CoffeeScript或TypeScript檔案,執行JSLint或是縮減JavaScript檔案。
 說明與展示如下: 
Bower:如下圖,您可以直接在bower.json檔案裡面加入一個JavaScript函式庫到ASP.NET專案裡面。
image
 提醒您,Visual Studio透過許多可用的軟體套件來增強「智慧選字(IntelliSense)」功能。下次當您打開一個方案,Visual Studio會自動還原您先前遺失的軟體套件,您就不用大費周章地檢查這些原始檔(資源檔)了。 
如果是Server端的軟體套件,您最好使用NuGet來幫忙。 
Grunt:現在的Web開發,您通常得自己管理一大堆task,只是為了建立自己的應用程式,例如:編譯LESS、TypeScript或CoffeeScript檔案、做lint、縮減JavaScript檔案、執行JS單元測試等等。每個開發團隊都有自己的需求並且依賴各自所需的工具來完成。Task runner讓這些管理與協同工作更加簡單。Visual Studio 2015支援了兩種最流行的task runner,就是Grunt與Gulp。
 例如,假設您想用Grunt編譯LESS文檔。只要到package.json裡面加入「grunt-contrib-less」軟體套件即可,它是一個第三方的Grunt plugin。關於grunt-contrib-less套件可以參閱https://github.com/gruntjs/grunt-contrib-less 。 
image
 如下圖,使用Visual Studio 2015裡面的Task Runner Explorer來綁定(繫結、bind)task的步驟如下:pre-build、post-build、clean或是在方案被打開的時候。
image
很輕易地就能在專案裡面將常用task給自動化,或是讓它們一起為您工作、以及用於跨團隊的專案之中。
  
Dependency Management的簡化 
在ASP.NET 5可以透過NuGet來管理專案所需各種軟體套件之間的相依性(dependency)。您可以用NuGet Package Manager或只需編輯JSON文檔(例如project.json)就能列出專案用上的所有NuGet軟體套件與版本。project.json文檔簡單好用,你可以用任何文字編輯器來處理,即使應用程序已被部署到雲端也可以輕鬆改動這些設定。
 project.json文檔如下: 
image
 如下圖,Visual Studio 2015智慧選字(IntelliSense)助您一臂之力,讓您迅速找到相關的NuGet軟體套件:
image
如下圖,智慧選字(IntelliSense)也幫您列出這些NuGet軟體套件的可用版本。
image

Cloud-ready(即時可上雲端)的設定
 在ASP.NET 5之中,我們不需再用Web.config文檔來進行設定。我們想讓應用程式部屬到雲端的步驟更加簡化,而且可以自動讀取到正確的環境設定值。新系統使您能夠從各種來源(如JSON、XML或環境變數)獲得這些已經命名的設定值。您可以自行決定哪些格式最適合當前的狀況。
 在Startup.cs文檔裡面,您現在可以新增或移除設定值。如下圖。
 image
上述的程式碼片段用來表示:一個專案從JSON文檔裡面取得設定值與環境變數。您可以輕易地定義其他來源,例如config.json文檔裡面的設定(如下圖)。
image
 在您的主機環境中,例如Windows Azure,在應用程式部屬之後可以設定環境變數與相關的設定值,用來取代本機上的預設值。不用擔心測試用的數值被部屬到(正式的)應用程式上。
  
Dependency injection(DI)
 現有的ASP.NET framework,例如:MVC、Web API與SignalR已經支援Dependency injection(DI),但不夠一致化也不是全面普及。ASP.NET 5提供了一個內建的的DI abstraction,可以一致地遍及整個Web Stack。您可以在啟動時存取服務、在中介軟體(middleware)、filter、controller、Model Binding的時候…..幾乎任何地方都可以透過管道(pipeline)的各種部分,虛擬地使用您的服務。ASP.NET 5包含一個簡約的DI容器來導入(bootstrap)系統,但您可以輕鬆地選擇想要的容器(例如:Autofac、Ninject等)來替換預設的DI容器。服務可以是單一的(singleton),也可用來作為要求(request)或是transient。。
 例如,下面的例子會讓您了解如何使用ASP.NET MVC 6的constructor injection去創建一個新的ASP.NET 5 Starter Web專案,並加入一個簡單的時間服務:
using System;
 
namespace WebApplication1
{
    public class TimeService
    {
        public TimeService()
        {
            Ticks = DateTime.Now.Ticks.ToString();
        }
        public String Ticks { get; set; }
    }
}
 當constructor被呼叫時,這個簡單服務類別(時間服務)被啟動並設定當前的Ticks。
 接下來,註冊這個時間服務為Startup類別裡面CoinfigurationServices方法的transient service。如下:
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddTransient();
}
 當TimeService物件被創建時,更新HomeController去使用constructor injection並且寫到Ticks。如下。
public class HomeController : Controller
{
    public TimeService TimeService { get; set; }
 
    public HomeController(TimeService timeService)
    {
        TimeService = timeService;
    }
 
    public IActionResult About()
    {
        ViewBag.Message = TimeService.Ticks + " From Controller";
        System.Threading.Thread.Sleep(1);
        return View();
    }
 
    // Code removed for brevity
}
 注意喔!Controller不會建立TimeService。只有當controller被實體化的時候才會被inject。
在MVC 6裡面,您可以使用[Activate]屬性(attribute)藉由屬性(property)inject services。不光是可以用[Activate]在controller上,也可以在filter與view元件上使用。這表示您可以簡化controller程式碼如下:
public class HomeController : Controller
{
    [Activate]
    public TimeService TimeService { get; set; }
 
    // Code removed for brevity
}
 藉由關鍵字@inject,MVC 6也支援Razor view裡面的DI。如下圖的程式碼,我們已經將時間服務,直接inject到view畫面裡並且定義一個TimeSvc屬性用來存取。
@using WebApplication23
@inject TimeService TimeSvc
 
<h3>@ViewBag.Message</h3>
 
<h3>
    @TimeSvc.Ticks From Razor
</h3>

當您執行這份應用程式時,可以看見controller與view有不同的(時間)tick值。如下圖。
image

 高速HTTP效能
 ASP.NET 5導入了一個新的、模組化的HTTP 要求管道(request pipeline),所以您可以只加入所需要的元件(而不用包山包海全部放進來)。這個管道也不再依賴System.Web。透過管道上耗能的減少,您的應用程式可以有更好的流量表現,也可以有更多調校後的HTPP stack。新管道的精簡化都源自Katana專案(http://katanaproject.codeplex.com/)與OWIN(http://owin.org/)的支援。
 想要自訂使用在管道內的元件,可以使用Startup類別的Configure方法。Configure方法可以用來定義您用在需求管道(request pipeline)裡面的中介軟體(middleware)。ASP.NET 5已經包含了很多源自Katana專案的中介軟體,例如middleware for static files、身份驗證與系統診斷。下圖展示了可在專案中的管道自行加入或是移除的特性:
public void Configure(IApplicationBuilder app)
{
    // Add static files to the request pipeline.
    app.UseStaticFiles();
 
    // Add cookie-based authentication to the request pipeline.
    app.UseIdentity();
 
    // Add MVC and routing to the request pipeline.
    app.UseMvc(routes =>
    {
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });
 
});
 您也可以寫自己專屬的中介軟體(middleware)元件並且加入管道之中。
  
開放原始碼(開放源碼)
 我們在GitHub上把ASP.NET 5當作一個開放原始碼的專案(https://github.com/aspnet/home)。您可以檢視這些程式碼、看看我們做了哪些異動、或是下載程式碼並提交您的修正。我們相信讓ASP.NET 5開源可以讓您更輕易地瞭解這些程式、瞭解我們的意向、並分享到專案裡面。
 
 文件與教程
 想要開始學習ASP.NET 5,您可以在ASP.NET官方網站找到文件與教學範例(http://www.asp.net/vnext)。以下是開啟您第一個ASP.NET 5專案的學習步驟:
  • Manage Client-Side Web Development in Visual Studio 2015, Using Grunt and Bower
 
  • View components and Inject in ASP.NET MVC 6
 
 ===================================================================================
  
 以下中文翻譯如果有不明確的地方,建議以原文為準。圖片也來自原文網站。
 如果您需要引用,請註明中文譯者:MIS2000 Lab.,並保留URL超連結到本文章
  
 這裡有一張圖片,我覺得講得很清楚。
如果把下圖左側的 ASP.NET 4.6改名為 Web Form 4.6或許更清楚了。
 

這份簡報的圖片也解釋得很清楚  http://www.slideshare.net/mbaric/introduction-to-aspnet-5-44980909

2015/3/18 微軟有提供影片介紹  http://channel9.msdn.com/Events/dotnetConf/2015/Introduction-to-ASPNET5 
  
關於 ASP.NET 5 我另外翻譯一篇相關文章:

[中文翻譯] ASP.NET 5 概觀 (ASP.NET 5 Overview,原作 Tom FitzMacken 2014/11/12)


 
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
......... 寫信給我,mis2000lab (at) yahoo.com.台灣 .....................................................................................
................   facebook社團   https://www.facebook.com/mis2000lab   ............................
................   Google+   https://plus.google.com/100202398389206570368/posts ..............
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ