2013/12/27

結構描述 ' ',資料庫 ' ',物件 ' ' 沒有 EXECUTE 權限。

我在作完資料庫移機的事情之後
執行網站 看到了這樣的錯誤:
結構描述 'xxx1 ',資料庫 'xxx2 ',物件 'xxx3 ' 沒有 EXECUTE 權限。
在網路上查了一下發現一篇解決方法:


http://hi.baidu.com/jinzesudawei/item/e1c18c262b2b168e9d63d1c6
連結內容摘要:
1. 在資料庫xxx2 身上按右鍵「屬性」
2. 在左邊選單按一下「權限」
3. 在你想要給予權限的登入帳號增加「執行」的權限


我照作,問題解決了,但我覺得這很奇怪
因為在舊資料庫的設定並沒有給予「執行」的權限

=== 正解在此

經過大師指點,在舊資料庫的設定是更細節的設定
可以只授權給某個資料表、預存程序、函數等

設定方法:
1. 打開資料庫xxx2 點開安全性
2. 在你想要給予權限的登入帳號身上按右鍵「屬性」
3. 左邊選單按一下「安全性實體」
4. 右邊按一下「搜尋」
5. 您要加入什麼物件?選下列類型的所有物件
6. 假設要開放權限的是預存程序,請選預存程序
7. 在上方列表會看到所有預存程序 可以在這設定執行權限

===

題外話,資料庫有一個設定是啟用 CLR 整合


http://msdn.microsoft.com/zh-tw/library/ms254506%28v=vs.80%29.aspx
連結內容摘要:
執行以下SQL
sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO


可以用
select [value_in_use] from sys.configurations where name = 'clr enabled'
來檢查目前資料庫的設定值


參考微軟的說明
連結內容摘要:
CLR 整合意味著您現在可以使用任何 .NET Framework 語言 (包括 Microsoft Visual Basic .NET 和 Microsoft Visual C#) 撰寫預存程序、觸發程序、使用者定義型別、使用者定義函數 (純量和資料表值) 和使用者定義彙總函式。


因為我原先以為這個是開啟授權的正解

所以多了這個題外話 (現在修文了)

2013/12/22

是你教小孩學會亂花錢/騙錢的嗎?

你是否曾經給你的小孩一筆零用錢

然後跟他說:「這零用錢你拿著,用完再跟我說。」

經過幾天之後再問他:「花完了沒?」

如果小孩回答:「還沒花完。」就不給他零用錢

如果小孩回答:「花完了。」就補足他零用錢

如果你這麼作了,那你就是在教小孩學會亂花錢/騙錢

為什麼會這樣?

因為這是獎勵小孩回答「花完了。」的機制

每當他回答「花完了。」,就會得到獎勵,獎勵是零用錢

這就會驅使小孩去亂花錢,或者說謊

曾經是小孩的我,也遇過這種情況。我當時的邏輯有兩套

一:「既然我把這筆錢花完就會有下一筆,那我何不很快的花完手上的錢呢?」

二:「我可以不把錢花完,卻跟大人說我已經花完了,那麼我就可以存到錢了!」


題外話

聽說政府預算編列的方法好像也類似這樣?

好像是個不把錢花完,錢就會變少的機制?

2013/12/13

閱讀 jquery 原始碼的筆記 - I don't like this

I_dont_like_this = function (key)
{
var nodes = document.querySelectorAll(key);
var l = nodes.length;
for(var i = 0; i <  l ; i++)
{
var node = nodes[i];
node.parentNode.removeChild(node);
}
}
I_dont_like_this("iframe.fb_ltr");
I_dont_like_this(".fb_iframe_widget");

這是我剛寫好,專門隱藏網站外掛FB按讚功能的函數,準備作成 chrome 外掛

document.querySelectorAll 這東西是瀏覽器內建的選擇器

我爬 jQuery 在第6456行找到的

SQL Server 備份還原 - 備份組包含現有的資料庫以外的資料庫備份

今天嘗試做資料庫的移機

做法是從A電腦的資料庫,按右鍵備份(選完整備份)

然後把備份檔複製到B電腦,在B電腦開一個新的資料庫,按右鍵還原

還原的時候遇到了這樣的錯誤訊息:備份組包含現有的資料庫以外的資料庫備份

爬了一下 google 文章

大部分的人是這樣解的:

===以下節錄其中一篇===

1.先執行以下的SQL

USE [master]
GO

restore database #資料庫名稱
from disk = '#備份資料庫檔路徑及檔名'
with
move '資料庫檔案邏輯名稱' to '資料庫mdf檔案所在位置',
move '資料庫記錄檔邏輯名稱' to '資料庫記錄檔ldf檔案所在位置',
NoRecovery,
Replace
go

執行完畢資料庫會呈現「還原中」

2.到要還原的資料庫上按右鍵→[工作]→[還原]→[資料庫]→[來源裝置]→瀏覽備份檔→勾選還原→確定
如此就完工了

===以上節錄其中一篇===

我看了覺得很怪 認為這個做法很不正常

於是繼續爬 Google 發現到另一個解法

===以下節錄另一個解===

SQL SERVER 資料庫備份:

  => 在資料庫上點右鍵 -> 工作 -> 備份 來建立備份。

 (第一次建完整,第二次以後就建差異備份)

 (一陣子可以重新再建立一次完整的備份)

 若出現“無法開啟備份裝置 'C:\123'。作業系統錯誤 5(存取被拒。)。"”

 -> 檢查SQL SERVER 組態管理員,SQL SERVER 的登入身份是否為LOCALSYSTEM

還原:

  => 在資料庫上右鍵 -> 工作 -> 還原 -> 資料庫

 若出現“備份組包含現有的xx資料庫以外的資料庫備份”時,

 在選項,勾選 覆寫現有的資料庫

===以上節錄另一個解===

這個看起來就很合理

但很多人搜尋到第一個解之後就寫一篇文紀念他

結果造成第一篇文的解法被發揚光大

所以我寫一篇文章 希望大家以後遇到這個問題可以選用第二個解

2013/12/6

閱讀 jquery 原始碼的筆記 - Array.slice 的妙用

在 jquery v1.10.2 裡面的第 232行寫到 :

toArray: function() {
return core_slice.call( this );
}

他的功能是把 jquery 物件從物件 {} 轉換成陣列 []
在這裡的 this 是個 jquery 物件
而 core_slice 是宣告在第 55 行 :

core_deletedIds = [],
core_slice = core_deletedIds.slice,

以上來自第48行和第55行
我們知道他宣告了一個變數  core_slice 把陣列的 slice 函數拿來用
 slice 能作什麼事呢?

這裡我們知道執行

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);

會得到

citrus = ["Orange","Lemon"];

的結果

根據測試我發現 core_slice.call(A) 的運作模式是先判斷 A 有無 length 屬性
如果有就 new 一個新的陣列 然後把對應的元素丟進新的陣列裡,如果沒有傳入參數的話就是全丟進去
嘗試實作看看 :

function slice(A, start, end) {
    var output = [];
    if (start == undefined) start = 0;
    if (end == undefined) end = A.length;
    if (start < 0) start = A.length + start;
    if (end < 0) end = A.length + end;
    for (var i = start; i < end; i++) {
        output.push(A[i]);
    }
    return output;

}

試用起來跟內建的一樣
可以測試以下程式碼

var o = {};
o.length = 5;
o[0] = 1;
slice(o);
[].slice.call(o);

閱讀 jquery 原始碼的筆記 - && 和 || 運算子的妙用


在 jquery v1.10.2 裡面的第 153行寫到:

context && context.nodeType ? context.ownerDocument || context : document,

它的實際意義是
如果 context 不存在 或者 context 沒有 nodeType 屬性時,傳回 document
如果 context 存在,而且 context 具有 nodeType 屬性時,嘗試傳回 context.ownerDocument ,如果 context.ownerDocument 不存在就改成傳回 context

為什麼可以這樣寫 ?

運算子 && 的功能

執行 A && B 假如A可以轉換為 false 就 return A 否則 return B

試著實作 function and(A,B){ if(Boolean(A) === false) return A; return B;}

結果發現 A && B 跟 and(A, B) 的運作結果完全相同

運算子 || 的功能

執行 A || B 假如 A 可以轉換為 true 就 return A 否則 return B

試著實作 function or(A,B){ if(Boolean(A) === true) return A; return B;}

結果發現 A || B 跟 or(A, B) 的運作結果完全相同



附上可以轉換為 false 的物件列表 (從這裡找到的)
0
-0
null
""
false
undefined
NaN
除了這些東西之外 丟進 Boolean 都會傳回 true


2013/11/28

爐石戰記的配卡參數-先手卡與後手卡的比例

爐石戰記遊戲中玩家可以做兩件事
1. 配卡
2. 對戰
本文講的是關於配卡時的觀念

生物卡帶有各種能力,就觸發時機可分為上場時觸發(戰吼),存活在場上時生效,死亡之聲等時機不一一列舉。

就發動效果可分為聖盾、謿諷、衝鋒、抽牌等效果不一一列舉。

本文針對卡片效果,將效果大致分為三類:
1. 觸發能力不需要友軍在場,也不需要敵軍在場
例如:
召喚生物 → 機械幼龍技師(只有我跟咬咬)
抽牌 → 見習工程師
嘲諷 → 森金禦盾大師(卡死丁狗)

2. 觸發能力需要友軍在場
例如:
友軍死亡抽牌 → 教派宗師
友軍增加能力 → 破碎之日教士、阿古斯防衛者、火舌圖騰

3. 觸發能力需要敵軍在場
例如:
心控 → 精神控制技師
摧毀 → 奔竄的科多獸
沉默 → 破法者(也可以放友軍)

第一種卡是先手卡,任何時間點都可以打出卡,這種卡通常不太能改變戰況。

第二、三種卡則是後手卡,遊戲肯定會把後手卡的效果做得比先手卡強,而當後手卡的效果越強,觸發條件越嚴格。(酷拉皮卡:我的能力只能用在幻影旅團上)

我們可以對第二、三種卡作細分:第二種是順風卡、第三種是逆風卡,第二種卡適合順風時擴大優勢,第三種卡適合逆風時逆轉戰況

有些後手卡可以直接打出來,不一定需要發動,但有些卡必須發動才可以出牌 (黑鐵矮人)。

若牌組全放後手卡,就很容易卡手牌(除非你願意放棄觸發效果)。若全放先手卡,則難以逆轉戰況。

所以,一個牌組內,先手卡和後手卡的比例是需要考量的參數之一
當然,順風卡跟逆風卡的比例也是需要考量的參數之一

2013/11/11

勇敢去做

一件做了可能會後悔的事情,需要鼓起勇氣才能做到

選擇做,可能會後悔

選擇不做,就變成遺憾

那麼做與不做該如何選擇

我們考慮後悔和遺憾的影響

通常遺憾是越老越遺憾,而後悔是越老越不後悔

離事情的時間點越遠,我們會覺得越遺憾

因為時間越長,可能造成的改變越大

但做了某件事後悔,隨著時間越久

做與不做好像就沒什麼差別了

因為時間越久,那件事的實際影響力就越小

所以我選擇做,你呢



以上文章使用的詞彙定義可能與一般字典不同

後悔:做了某件事情,如果可以重來的話會選擇不做
遺憾:沒做某件事情,如果可以重來的話會選擇做

2013/10/22

穿過又不打算馬上洗的衣服應該收在哪?

穿過又不打算馬上洗的衣服應該收在哪?

朋友們的答案:

  • 亂丟
  • 地上
  • 床上
  • 椅背
  • 門後
  • 陽台
  • 鐵架
  • 衣櫃 (另一個)
  • 洗衣籃 (另一個)
  • 木人樁 (衣帽架)
  • 三層櫃 (開放式)
  • 隨便放 會自己變乾淨

權衡

當工人A可以產出1個100或2個80或3個60,而老闆選擇3個60的時候,並不表示工人A沒有能力產出100,因為這是權衡之下的產物。

交接到60的工人B要看清楚這點,不要一口咬定是工人A的技術問題。

2013/7/23

Git Server On Windows

目標 

弄一台 Git Server 在 A電腦

另外在 B電腦用 http 的方式連線到 A 的 Git Server

安裝方法 

A 跟 B 都要安裝的東西 : https://code.google.com/p/msysgit/

A 在 IIS 上面用 .net 4.0 架這個網站 https://github.com/JeremySkinner/git-dot-aspx/downloads

其中  web.config 要稍微修改一下

<add key="RepositoriesDirectory" value="這裡填存放檔案的路徑" />

詳情參考這篇文章 http://www.jeremyskinner.co.uk/2010/06/25/hosting-a-git-server-under-iis7-on-windows/

接著在B安裝 https://code.google.com/p/tortoisegit/


開一個新的Repo

在 A 開啟你剛剛 IIS 架好的網站首頁進去會看到這樣的畫面

點箭頭指的那裏可以建立一個新的

然後會多一條灰灰的在下面 (被馬掉的那個)

點他可以看到訊息


Client 連線到 Server

找個空的資料夾按右鍵


填網址的地方就填從 server 拿到的就好


2013/1/4

Regexp link


online 例句
http://regexr.com/

regexp 圖解
https://regexper.com/

regexp 圖解
https://www.debuggex.com/

regexp ruby 線上編輯器
http://rubular.com/