2015-06-08

將 windows live writer 的草稿存在網路磁碟上

一直都是在用 windows live writer 寫部落格.

雖然已經非常久沒有寫甚麼東西了...

不過我還是每台電腦都有裝.桌機或是筆電...

而writer的儲存都是存在 My Documents\My Weblog Posts 下,

如果你想要在每台上都可以編輯,如果不是直接存到server上當草稿,

就是要將local的檔案複製來複製去,

前兩天看到一個修改儲存路徑的方式,

因為可以修改儲存路徑,所以就可以直接將草稿存到網路磁碟上,

像是存在 OneDrive, DropBox 或是 Google drive 上了.

而修改的方式如下:

  1. 開啟regedit
  2. 將左側樹狀結構切換到下面路徑
    HKEY_CURRENT_USER\Software\Microsoft\Windows Live\Writer
  3. 然後在右側內容中按滑鼠右鍵,新增一個字串值(String Value),內容如下
    Name : PostsDirectory
    Data : {你要儲存的路徑}
  4. 關閉regedit, 結束

改完後,當你再開啟windows live writer時, 他就會在你指定的路徑下產生 Drafts 跟 Recent Posts 的資料夾,這樣就完成了...

 

ref. Syncing Windows Live Writer Drafts to the Cloud (Dropbox) and other bug fixes

2015-04-02

asp.net專案使用SignalR

SignalR 到現在也已經到了2.2.0

從 1.x 的時候就偶爾玩一下,

2.0 開始只支援 .net framework 4.5,

所以 1.x 要到 2.0 就要整個專案有個升級.

不然就是停留在 1.x 就好了.

 

但是網站並沒有用 MVC, 所以照網路上的一些教學弄,總是弄不起來…

ref : Upgrading SignalR 1.x Projects to version 2

 

症狀 : "Signalr/hubs" not found

 

2.0後,不需要在 global.asax 中的 Application_Start 設定 RouteTable.Routes.MapHubs() 了.

改成需要加個 Startup.cs 設定.

不過我的專案是一般的 asp.net 專案, 它似乎不認得或是不知道要執行這個檔案

經過 google 後才發現,要在 web.config 中加上一個設定

 

<add key="owin:AutomaticAppStartup" value="true" />

 

另外,如果加了後還是沒有執行,

或許是因為他不知道要執行這個 startup, 所以就在加上下面這個設定.

 

<add key="owin:AppStartup" value="SingalRBase.Startup" />

 

ps. SignalRBase.Startup 是 startup.cs 中的 namespace 跟 class name

2011-07-06

[KB]遠端桌面連window vm時只有黑色螢幕

前言

因為需求,所以會建一些vm的環境來共同開發,而最近,有一台vm不知怎麼了,
用遠端桌面連指出現黑色畫面,但是一些服務看起來都很正常,
在另一台主機上透過服務的主控台都還可以去設定那些服務.
連線它的資料夾也都沒問題.
就只有遠端桌面一片漆黑.也看不到登入視窗.

解決方式

在網路上搜尋了一下,看來似乎是跟改了windows color scheme的關係.
(雖然已經忘了是不是有改過,不過改完後確實就可以用了…)

  1. 在另一個相同作業系統中匯出下面路徑的registry.(匯出預設的設定)
    [HKEY_USERS\.DEFAULT\Control Panel\Colors]
  2. 使用Registry編輯器連線到有問題的主機.
  3. 將剛剛匯出的設定,匯入到有問題的主機.
  4. 重該有問題的主機.(可以使用shutdown的指令去重啟遠端的主機,例 : shutdown /r /m \\remote-server)
  5. 等待重開機,完成!

參考網頁:

Black screen in a Windows VM or an a physical server

2011-03-23

[MSSQL]兩個insert的語法

1.將view或是tableB的資料匯到table A


insert into tableA (field1,field2,field3)
select F1,F2,F3 from
tableB
where F4=0

這個方式之前就有了,在這只是記錄一下.

 

2.insert大量資料 (new feature of SQL 2008)


insert into tableA (field1,field2,field3) 
values
('xxxa','xxxxb','xxxxc'),
('xxxa','xxxxb','xxxxc'),
('xxxa','xxxxb','xxxxc'),
('xxxa','xxxxb','xxxxc')


這個是SQL 2008的新功能.


不過用這樣的語法,一次最多只能新增1000筆.


如果要一次新增更多,可以使用BULK INSERT.


 


參考資料:


SQL SERVER – 2008 – Insert Multiple Records Using One Insert Statement – Use of Row Constructor
http://blog.sqlauthority.com/2008/07/02/sql-server-2008-insert-multiple-records-using-one-insert-statement-use-of-row-constructor/


BULK INSERT to table with specific columns
http://beyondrelational.com/blogs/madhivanan/archive/2010/03/17/bulk-insert-to-table-with-specific-columns.aspx

2011-03-21

[Asp.Net]在沒有SMTP的情況下確認發信的程式

.Net 2.0之後提供了一個specifiedPickupDirectory的功能,
讓你在沒有SMTP server的情況下使用資料夾來儲存發信的內容.

使用方式就是在web.config中加入以下的設定

<system.net>
 <mailSettings>
  <smtp deliveryMethod="SpecifiedPickupDirectory">
   <specifiedPickupDirectory pickupDirectoryLocation="C:\MailPickup\" />
  smtp>
 mailSettings>
system.net>

設定完後,發送的信件就會存在指定的資料夾中.

update [2012/02/23] :

如果你是使用在.net 4.0的話,有可能設定完後出現下面這錯誤

The SMTP host was not specified.

這是個已知的問題 :
http://connect.microsoft.com/VisualStudio/feedback/details/539160/smtpclient-reports-invalidoperationexception-when-disposed-immediatelly-after-sending-mail-and-pickup-directory-is-used

而臨時的解決的方式是在Smtp的tag下加個


<network host="localhost" />

完整範例 :
<system.net>
 <mailSettings>
   <smtp deliveryMethod="SpecifiedPickupDirectory">
     <network host="localhost" />
     <specifiedPickupDirectory pickupDirectoryLocation="C:\MailPickup\" />
     smtp>
 mailSettings>
system.net>



2010-11-15

[Tips]Javascript-判斷變數,物件是否存在

在JavaScript中判斷變數是否存在

if (typeof(_varName) == 'undefined')

  …the variable is not exist.

在jQuery中判斷下拉選單裡是否有特定value的option存在

if (jQuery("#" + _objId + " option[value='" + _value + "']").length > 0)

2010-10-23

[Tips] Entity Framework and JSON

需求

提供JSON的格式資料,但是不要將所有的entity欄位都輸出.

 

方式

 

輸出所有欄位

   1: using (MyStockEntities entities = new MyStockEntities())
   2: {
   3:     JavaScriptSerializer js = new JavaScriptSerializer();
   4:     return js.Serialize(entities.CodeStocks);
   5: }

 


輸出需要的欄位



   1: using (MyStockEntities entities = new MyStockEntities())
   2: {
   3:     JavaScriptSerializer js = new 
   4:     JavaScriptSerializer();
   5:     var results = from cols in entities.CodeStocks
   6:         select new
   7:         {
   8:             StockId = cols.StockId,
   9:             StockName = cols.StockName,
  10:             StockType = cols.StockType
  11:         };
  12:     return js.Serialize(results);
  13: }

2010-03-23

[code snippet]清除html tag並清除多餘的空白

//清除Html Tag
string stripped = Regex.Replace(content, @"<(.|\n)*?>", string.Empty);

//清除多餘的空白
Regex r = new Regex(@"\s+");
stripped = r.Replace(stripped,@" ");

2008-02-18

玩玩asp.net 2.0的caching系列二 - RemoveOutputCacheItem

在asp時代,要作cache通常是用application來存資料,
要完整一點的.就是自己寫個class來操作application控制要cache的資料.

但是在asp.net,頁面要cache變得簡單許多.
只要一行

<%@ OutputCache Duration="60" VaryByParam="None" %>

就可以了,
但是,現在問題又來了,
客戶希望後台新增完後他要立即可以從前台看到更新的資料.
先前在網路上看到是有說只要頁面有修改outputcache就會被清除.
但是...這是在測試時候的方式,
在production環境的頁面應該是不能讓客戶每次更新完就去動一下頁面.
要解決這問題,
可以使用HttpResponse.RemoveOutputCacheItem
用法如下 :

HttpResponse.RemoveOutputCacheItem("/default.aspx");

假設你的default.aspx有設定了outputcache,那你可以新增一個管理cache的頁面.
在那個頁面上有個按鈕,點下後呼叫上面的程式.
而RemoveOutputCacheItem所帶的參數就是你的頁面的絕對路徑(不能使用"../"這種相對路徑).

測試網址:

OutputCache頁面 : http://vip.blueshop.com.tw/ajun/cachetest.aspx
Cache管理頁面 : http://vip.blueshop.com.tw/ajun/cachemanager.aspx

outputCache頁面在上一篇介紹過了,而管理的頁面中有兩個功能,
remove cache才是這次的測試範例.

只要確定網址正確,按下remove cache後,該頁面的outputcache就會被清除,
再次瀏覽outputcache的頁面後就會是被更新後的資料了.

問題到這大致上已經ok了,
但是...還是有點狀況,
因為後台維護的資料是最新消息,
而除了首頁外,還有其他的頁面也都會顯示最新消息,
所以如果要用RemoveOutputCacheItem一筆一筆清除cache似乎有點麻煩,
所以下一篇將會是說明怎麼處理這樣的問題.
ps.範例中有這個的程式碼,如果等不及想要知道解決方案的話,可以直接看code.

範例下載:
http://ajunlee.googlepages.com/CacheTest.rar

玩玩asp.net 2.0的caching系列一 - OutputCache與Substitution

作網站的首頁的時候,通常為了增加效能,都會作一些cache的動作,
而在asp.net中,要作將網頁作cache很簡單,
如果要cache整個頁面,只要在aspx中加上下面這段

<%@ OutputCache Duration="60" VaryByParam="None" %>

這樣可以讓你的頁面cache 60秒.
如果你的網址如下

ShowCity.aspx?city=101

也就是會因為參數不同而有不同結果,而你也希望能快取這些頁面,
那就將設定改為

<%@ OutputCache Duration="60" VaryByParam="city" %>

如果有多個參數的話,那就以分號(;)區隔就可以了,例如

<%@ OutputCache Duration="60" VaryByParam="city;zipcode" %>

可是現在問題來了.
如果首頁都是公開的資料那也就沒有甚麼問題,
但是現在首頁要放個登入者的名稱,
讓使用者知道自己已經登入,而且知道自己叫甚麼名字.
而整頁作outputcache的話,一連到網頁可能會看到別人的名字...
一開始,是用ajax的方式,在也面呈現以後,
透過javascript去呼叫一隻aspx取得登入資料,然後顯示在某個div裡面.

但後來發現asp.net 2.0中有個Substitution的控制項可以解決這樣的問題,

而Substitution 的用法如下:

aspx

<asp:Substitution ID="Substitution1" runat="server" MethodName="GetDateTime" />

aspx.cs

public static string GetDateTime(HttpContext context)
{
    return "主機時間 : " + DateTime.Now.ToString();
}

範例網址 : http://vip.blueshop.com.tw/ajun/cachetest.aspx

點選上面的範例網址,然後重新整理幾次,
你會發現上面的主機時間60秒才會更新.
但下面的主機時間是每次都會更新.

 

參考網址:
http://dotnetjunkies.com/QuickStartv20/aspnet/doc/ctrlref/standard/substitution.aspx

範例下載:
http://ajunlee.googlepages.com/CacheTest.rar

2008-02-01

取得MS SQL中資料欄位的描述內容

用ado.net的connection.GetSchema取得資料表結構算是蠻方便的.
但差的一點就是取不到欄位的說明.
因為又要開始寫文件了.而之前寫的SchemaGen不能支援MS SQL 2005.
所以現在正在著手寫SchemaGen 2005版.
另外也練習使用所謂的design pattern來進行...
至於用哪個...先試試看再說...

回到主題.
之前其實有寫過相關的主題.
不過當初主要是說明用T-SQL維護欄位的描述.
現在再針對::fn_listextendedproperty加一些說明

如果要針對某個資料表的某個欄位取得
可以使用下面的語法

select value form ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'資料表名稱', 'column', N'欄位名稱')

如果要取得某個資料表中所有欄位說明的話,可以使用

select * form ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'資料表名稱', 'column',NULL)

另外.如果你的資料表也有設定說明的話,
可以使用下面的語法取得資料表的說明

select * form ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', N'資料表名稱',NULL,NULL)

當然.要取的所有資料表的說明就是用下面這個

select * form ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table',NULL,NULL,NULL)

另外,上面的參數中有使用NULL的,也可以改用default.意義應該是相同的.例如

select * form ::fn_listextendedproperty(default, 'user', 'dbo', 'table',default,default,default)

而修改或是新增欄位或是資料表說明的話,
可以參考上次寫的T-SQL維護欄位的描述,
使用sp_addextendedproperty及sp_updateextendedproperty來處理

 

相關連結 :

fn_listextendedproperty (Transact-SQL)
http://msdn2.microsoft.com/en-us/library/ms179853.aspx

sp_addextendedproperty (Transact-SQL)
http://msdn2.microsoft.com/en-us/library/ms180047.aspx

sp_updateextendedproperty (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms186885.aspx

當開發機是Windows on ARM...

 在MacOS上要使用windows去編譯一些程式常常會遇到一些plamform的問題... - cmake build failed 當使用 cmake -S . -B build 要建立 build system files 原本的專案是在x64上, 所以直接執行會直接使用A...