What Is Software Design?

程式設計不是 “building software”,而是 “designing software”。

Is Design Dead?

軟體系統的設計是演進來的,不能一步到位,而是要藉由憑繁與使用者互動得到的回饋來修改系統設計。

Programming is Gardening, not Engineering

與其把程式設計比喻成蓋房子,實際上更像是園藝。

Orthogonality and the DRY Principle

所有程式設計活動其實都是維護,因為絕大部分的時間都在改code,寫一點改一點。即使是新專案,也很快需要回頭作修改。

2014年2月26日 星期三

利用sublimall來管理您的 sublime text Packages 版本

step1.

先到sublimall來申請帳號密碼

http://sublimall.org/

step2.
安裝 Sublime Text 3 主程式

主控台視窗,或直接按下 Ctrl + ` 組合鍵

view => show console 

  1. 請注意:這段安裝程式碼,僅適用於 Sublime Text 3 版本!
  2. import urllib.request,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by) 

安裝好之後的畫面如下,你可以再按一次 Ctrl + ` 組合鍵以關閉主控台視窗

step3.
 [Preferences] –> [Package Control] 啟用這個 Sublime Text 套件管理員
Ctrl+Shift+P 然後輸入 inst 之後按下 Enter 鍵
Install Package
Ctrl-Shift-P Install Package and type Sublimall to install it.

將sublimall安裝進去


step4.設定您sublimall的email and api key

You just have to click on PreferencesPackage SettingsSublimall and Settings - User.

{
    ////////////////////////////
    //// Sublimall settings ////
    ////////////////////////////
    "api_root_url": "http://sublimall.org",
    "api_upload_url": "/api/upload/",
    "api_retrieve_url": "/api/retrieve/",

    ///////////////////////
    //// User settings ////
    ///////////////////////
    "email": "請輸入您的emil",
    "api_key": "請輸入key",
    // Paths must be: "Packages/SublimeCodeIntel" or "Installed Packages/Sublimall"
    "ignore_packages": [],
    // Set true if you want to exclude packages managed by Package Control
    "exclude_from_package_control": false,
    // Set false if you don't want to encrypt your configuration
    "encrypt": true,
    // Upload timeout in seconds
    "http_upload_timeout": 120,
    // Download timeout in seconds
    "http_download_timeout": 120,
    // Path to 7zip executable, though Sublimall tries to find it out itself
    "7za_path": "",
    // HTTP proxy to use for HTTP requests. Support for authentication
    // Examples: http://user:password@host:port or http://ip:port
    "http_proxy": ""
}




2014年2月6日 星期四

asp.net api mvc4 資料庫 更新 更新.edmx 與 model

step1.尋找已經加入的Model1.edmx的檔案,開啟檔案,找到要更新的table按下右鍵,點選"從資料庫更新模型"進入更新精靈


step2. 更新好後 會發現 .tt檔中的 model沒有跟著更新,請點選.tt檔按右鍵 "執行自動工具"

2014年2月4日 星期二

ASP .NET C# MVC4 寫 Api 自定api說明文件 利用HelpPage套件

STEP1. ASP.NET Web API 的相關路由設定
 App_Start\WebApiConfig.cs 檔案












讓我們的 ASP.NET Web API 永遠只回應 JSON 格式

setp2.替 ASP.NET Web API 的 API 控制器加上註解

我們先為 API 控制器加上 XML 註解,直接在類別上方輸入三條斜線 ( /// ) 就會自動產生 XML 註解範本

























setp3.產生專案的 XML 文件檔案
修改方案總管中的「專案屬性」




切換到「建置」頁籤,再勾選「XML 文件檔案」




預設的 XML 文件檔案會儲存在 bin\ 目錄下,請把內容改成 App_Data\XmlDocument.XML 這個路徑與檔名,之後才能讓 ASP.NET Web API 的說明頁面讀取到這個檔案。



最後執行 建置專案 ( F6 ) 就會自動在 App_Data 目錄下產生 XmlDocument.XML 檔案,而且每次建置都會自動更新此 XML 文件。




step4.透過 NuGet 安裝 Microsoft.AspNet.WebApi.HelpPage 套件


若要安裝 ASP.NET MVC 4 內建的 ASP.NET Web API ( v1 ) 相容的 HelpPage 版本,必須安裝舊版的 HelpPage  套件
安裝舊版套件需要透過套件管理器主控台才能執行安裝命令,如下指令與圖示:
Install-Package Microsoft.AspNet.WebApi.HelpPage -Version 4.0.30506



安裝的過程,它會自動幫你安裝一個名為 HelpPage 的 MVC 子網站 ( Area )

最後,我們開啟 Areas/HelpPage/App_Start/HelpPageConfig.cs 進行設定,把第一行註解取消,即可自動讀入 API 控制器所設定的那些 XML 文件。


config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));

其重點還是在上述陳述式的路徑與檔名必須正確:

"~/App_Data/XmlDocument.xml"

setp4.

我們測試一下,直接瀏覽到 http://localhost/Help 網址


















接下來你可以到 專案 的view的資料夾內 index中
加入聯接過去的方法
<a href="~/Help">API Document 說明書請點這裡</a>



最後小提醒

在撰寫注解的時候<param name =""  如果沒有出來顯示
表示你在你的mvc 方法中沒有設定輸入的參數  只有寫注解他是不會顯示的





參考網頁:http://blog.miniasp.com/post/2013/11/05/Creating-ASPNET-Web-API-Help-Pages-for-ASPNET-MVC-4.aspx

ios AFNetworking 將token包入 header中 比較安全

setp1.
在api溝通中可以將資料放置 header or body  透過ssl



-(void)modifyWater:(WaterSync*)water uuid:(NSString*)uuid completionHandler:(void (^)(NSDictionary *retDic, NSDictionary *errorDic))handler{

    NSString *path = [NSString stringWithFormat:@"v2/Drinkings"];

    NSDictionary *dic = @{@"uuid": water.uuid, @"cc":water.amount, @"drinked_at":water.time, @"auth_token":[[PassionBeanAccount sharedAccount] authToken]};
    
    [self setDefaultHeader:@"auth_token" value:[[PassionBeanAccount sharedAccount] authToken]]; //將token包入header
    
    [self patchPath:path parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"ok");

        [MyWeb handleJsonResponseWithDataWithCompletionHandler:handler error:nil data:responseObject];
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [MyWeb handleJsonResponseWithDataWithCompletionHandler:handler error:error data:nil errorCode:[operation.response statusCode]];
        
    }];


}

2014年1月23日 星期四

利用Foundation來設計適應的web app ui 版型

本文介紹的是位於美國加州Campbell,一家名叫"Zurb"的設計公司所製作的Foundation框架。Pixar(皮克斯動畫公司)和National Geographic(國家地理頻道)都有採用此框架製作網頁。

從Foundation專案的Features(特色介紹頁),可得知Foundation的三大特色是Grid(格線系統)Rapid Prototyping(快速原型開發)Mobility(支援行動裝置)

HTML Page Markup

<!DOCTYPE html> <!--[if IE 9]><html class="lt-ie10" lang="en" > <![endif]--> <html class="no-js" lang="en" > <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Foundation 5</title> <!-- If you are using CSS version, only link these 2 files, you may add app.css to use for your overrides if you like. --> <link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/foundation.css"> <!-- If you are using the gem version, you need this only --> <link rel="stylesheet" href="css/app.css"> <script src="js/vendor/modernizr.js"></script> </head> <body> <!-- body content here --> <script src="js/vendor/jquery.js"></script> <script src="js/foundation.min.js"></script> <script> $(document).foundation(); </script> </body> </html>


改變版型請參照docs 設定id
http://foundation.zurb.com/docs/

利用 Responsive web design 自動適應所有版型 利用Bootsrap


step1. 先到官方網站去下載Bootstrap
http://getbootstrap.com/

step2.進入網站後 點選 左邊的Download 將套件下載回來!!!


step3.完畢解壓縮,分別會看到css、fonts、js的資料夾

step4.接著到jQuery官網中,下載jqury並放到js的資料夾中。



Bootstrap(RWD)應用:

接著在官網中,可找到以下的表格,此表格相當的重要,主要是在說明,該套件中的螢幕尺寸的那些,分別有四個尺寸,且代稱分別為lg、md、sm、xs....等。 

而Bootstrap是將版面欄位,等分等12塊,因此在設計RWD的版面需用百分比的方式來作設計。 


step5.這樣都懂了吧!!!來自己手做一個網頁試試嚕!!!




範例code

<!DOCTYPE html>
<html>
<head>
<title>test101</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">

<style type="text/css">

#header{height: 100px; background: :#1ab2f1;}
#header .container, #footer .container{border:solid 1px #fff;}
#content-body, #sidebar{border: solid 1px #333;}

html,
body{
height: 100%;
}

#wrap{
min-height: 100%;
height: auto;;
margin: 0 auto -60px;
padding: 0 0 60px;
}

#footer{height: 60px; background: #1ab2f1;}

</style>

</head>

<body>
<div id="wrap">
<div id="header">
<div class="container" style="border:solid 1px #fff;">
check
</div>
</div>


<div class="container"> 
<div class="row">

<div class="col-lg-9" id="content-body">內容</div>
<div class="col-lg-3" id="sidebar">側邊攔</div>
</div>
</div>
</div>

<div id="footer">
<div class="container"> 
版尾
</div>
</div>

<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
</body>


</html>

結果



2014年1月17日 星期五

判別 NSNumber 正確寫法

step1. 錯誤的寫法
NSNumber *value = [data objectForKey:@"samount"];
 if (value == 0)
     {
          NSLog(@" OK :) ");
     }
     else 
     {
          NSLog(@"  Bad :( ");
     }
step2.正確的用法
if ([value isEqual:@(0)])