2016年3月30日 星期三

[Ruby] 教學網站

Ruby

Rails
1.    Rubyon Rails
2.    RailsRumble

SASS
  1. Sass

 Coffee Script
1.    CoffeeScript

Slim
1.    Slim
2.    Ruby Slim

 Haml
1.    Haml

其他




[Ruby]Ubuntu 底下安裝 Ruby on Rails

Ubuntu 上透過 RVM 安裝 Ruby on Rails

一、 使用 RVM 安裝 Ruby

為確保我們待會下載的程式都是最新版的,先更新系統。
sudo apt-get update
sudo apt-get upgrade

更新完成以後,我們就能開始安裝 RVM ( Ruby Version Manager ),這個程式可以很方便的讓我們在不同的 Ruby 版本間作切換, 以下我們只會安裝最新的版本,如果想要安裝其他的版本,可以參考這個文章
我們會需要用到 curl 這個工具來幫助我們安裝 RVM ,所以還沒安裝過curl 的朋友請先安裝curl 
sudo apt-get install curl

安裝 RVM,請輸入:
\curl -sSL https://get.rvm.io | bash

(因參考原本的語法有問題,所以有做更改)

當安裝完成以後,載入 RVM
或許你需要將目前所處於的 shell 關閉,並重開一個新的 shell
source ~/.rvm/scripts/rvm

RVM 還有一些需要的依賴程式需要安裝,輸入下面這個指令可以自動安裝 RVM 所需的相關程式
rvm requirements

二、安裝 Ruby

已經安裝好 RVM 的話,那麼安裝 Ruby 就變得很簡單了。
rvm install ruby

安裝完成後,要使用哪一個版本的 Ruby 當作預設值。
rvm use ruby --default

三、安裝 RubyGems

這個步驟是為了確保我們有正確安裝 Ruby on Rails 所需的所有 Gems ,如此一來 Rails 才能正確執行。我們可以透過 RVM 來繼續安裝 RubyGems
rvm rubygems current

第四、安裝 Rails

當上面步驟都完成以後,現在我們可以安裝 Rails 了。
gem install rails






2016年3月29日 星期二

[MSSQL]SQL特殊語法


一、搜尋資料庫所有欄位名稱,可以使用這兩種語法

select * from sys.columns


二、取得資料庫中所有資料表的名稱,可以使用以下語法

select * from INFORMATION_SCHeMA.TABLES


1.取得資料庫表單數量

select count(*) as totaltablenumber from sysobjects where xtype = 'U';


2.取得資料表名稱(tablename)及欄位數量(columnnumber)

select name as tablename, info as columnnumber from sysobjects where xtype = 'U';
3.取得某一資料表內所有欄位名稱

select b.name from sysobjects as a, syscolumns as b where a.xtype = 'U' and a.id = b.id and a.name='資料表單名稱';
3.1 取得某一資料表內所有欄位名稱

EXEC sp_columns 表單名稱

4.另外3的話不會照欄位順序排,請加入: order by b.colorder

5.取得資料庫所有資料表名稱

select * from sysobjects where xtype = 'U'

以上為SQL 2000


2005請使用下列語法

6.在SQL SERVER 2005抓取資料庫的SQL語法

select name from master.dbo.sysdatabases

7.抓取資料表的SQL語法

select Table_name from INFORMATION_SCHEMA.TABLES order by Table_name
8.抓取欄位的SQL語法

select column_name from INFORMATION_SCHEMA.COLUMNS where table_name='
TableName'












[ASP.NET] 使用 acsx 與 aspx - WebUserControl


簡單的說「就是把元件放在 ascx 上,然後在 aspx 裡使用」。
今天舉的例子就是在 ascx 裡放入 DataGrid 然後在 aspx 裡呼叫,並以 findcontrol 方式來連結設定相關的屬性。

Ascx 內容

在  WebuserControl 放上
<asp:DataGrid runat ="server"  ID ="gd"></asp:DataGrid>

Aspx 使用 Ascx

在Aspx放上要使用的元件,用DataGrid」當範例。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xx" Inherits="xxx" %>
<%@ Register TagPrefix ="wuc" TagName ="wuc1" Src ="~/WebUserControl1.ascx" %>
TagPrefix ="wuc"wuc 可自行定義。
TagName ="wuc1"wuc1 可自行定義。

<body> 
      <wuc:wuc1 ID="wuc1" runat="server" />
</body>

findcontrol 對應 ascx 裡的元件

元件是放在 ascx 裡,
所以在 apsx 裡要應用就必須先用 findcontrol 把他對應起來,
底下簡單的例子,是將 findcontrol 的動作寫在 page_load
然後指定 SqlDataSource 接著 bind 起來

protected void Page_Load(object sender, EventArgs e)
{
       DataGrid gd1 = new DataGrid();
       gd1 = (DataGrid)wuc1.FindControl(gd);
       gd1.DataSource = SqlDataSource1;
       gd1.DataBind ();
}

黃昏的甘蔗

[ASP.NET] OLEDB,ODBC 讀取 DBF




//範例一: 利用Oledb讀取DBF資料庫
string dbDirectory = @"d:\tmp";(檔案所在資料夾)
string database = "World.dbf";
string sql = "select * from " + database;
string cnstr ;
DataTable dt = OleDbDataTable(databaseDirectory, sql);

public static OleDbConnection OleDbOpenConn(string dbDirectory)
{
    cnstr =  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbDirectory + ";";
    cnstr+=" Extended Properties=dBASE IV; User ID=Admin; Password=;";
    cnstr = string.Format(cnstr);
    OleDbConnection icn = new OleDbConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OleDbDataTable(string dbDirectory, string OleDbString)
{
    DataTable myDataTable = new DataTable();
    OleDbConnection icn = OleDbOpenConn(dbDirectory);
    OleDbDataAdapter da = new OleDbDataAdapter(OleDbString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;
}

//範例二: 利用Odbc讀取DBF資料庫
string database = @"d:\tmp\World.dbf";
string sql = "select * from " + database;
string cnstr
DataTable dt = OdbcDataTable(database, sql);

public static OdbcConnection OdbcConn(string Database)
{
    cnstr = "Driver={Microsoft dBase Driver (*.dbf)}; SourceType=DBF; ";
    cnstr+="SourceDB=" + Database + ";  Exclusive=No; Collate=Machine;";
    cnstr+="NULL=NO; DELETED=NO; BACKGROUNDFETCH=NO;";
    OdbcConnection icn = new OdbcConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OdbcDataTable(string Database, string OdbcString)
{
    DataTable myDataTable = new DataTable();
    OdbcConnection icn = OdbcConn(Database);
    OdbcDataAdapter da = new OdbcDataAdapter(OdbcString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;

[codeigniter] win7、ubuntu 去除index.php

win7 : 

有三大步驟:

1.

打開 : C:\AppServ\Apache2.2\conf\httpd.conf
(如果是安裝xampp的路徑為 : C:\xampp\apache\conf\httpd.conf)
(xampp似乎不用設定 , 只需要.htaccess就可以了 , 不太確定 , 至少我遇到這樣的情況)

修改1 :
#LoadModule rewrite_module modules/mod_rewrite.so
把 # 去掉變成:
LoadModule rewrite_module modules/mod_rewrite.so

修改2 :
 AllowOverride None
把None 改成 All
 AllowOverride All
共有三處

2.

打開 : C:\AppServ\www\ci\application\config\config.php

修改 :
$config['index_page'] = 'index.php';
把 index.php刪掉變成:
$config['index_page'] = '';

3.

我的 ci 檔案是放在 C:\AppServ\www\ci 下,在這裡面新增.htaccess檔案 (也就是與application資料夾、 system資料夾、user_guide資料夾、index.php同一層)

.htaccess檔案內容:
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|images|robots\.txt|$)
RewriteRule ^(.*)$ /ci/index.php/$1 [L,QSA]             <=注意我是放在ci資料夾下,所以這部份要記得改,如果是直接放在根目錄index.php/$1 這樣就行了

重新啟動Apache,我是建議直接重開機比較乾脆,比較可以避免有的沒的問題@@





Ubuntu : 

假設.htaccess己經放置在www/ci下了,CI的config.php也己經將index.php刪除(也就是己完成上面win 7步驟2及3),接下來就只剩開啟rewrite了(其實也就是在ubuntu作win 7的步驟1)

1. 在/etc/apache2下,輸入 : sudo a2enmod
2. 會問你要啟動哪項模組服務,輸入 : rewrite
顯示 : To activate the new configuration, you need to run :
             service apache2 restart   
    (rewrite已經啟動 , 重新啟動你的apache2  , 也可設定完以下再重新啟動)
3. 設置.htaccess (放到www根目錄下) (己放入的話省略這步驟)
4. 確定apache可以讀取.htaccess
5. 修改httpd.conf 將 AllowOverride None 改成 AllowOverride FileInfo 或 AllowOverride All
(註:要到/etc/apache2/sites-available/default 裡找到此段來修改,共有3處 , ubuntu server有4處)
6.重啟apache,輸入 : sudo service apache2 restart





--------------------------------------------------------
後記 : 這樣會造成圖片顯示及css、 javascript沒辦法引入

所以還需要做以下的步驟 : 

假設我的架構為以下

www/ci
         └>/application
         └>/system
         └>/user_guide
         └>/.htaccess
         └>/index.php
         └>/assets                  (自行新增的資料夾,存放圖、css、javascript)
                  └>/css
                  └>/javascript
                  └>/images

則要修改.htaccess,將assets資料夾加入進來

將原本的 : RewriteCond $1 !^(index\.php|images|robots\.txt|$)
     ↓
修改成 : RewriteCond $1 !^(index\.php|images|assets|robots\.txt|$)

 assets裡的東西就能正常使用了~

EX:

假如要引入jQuery (路徑 : assets/javascript/javascript/jquery-1.8.3.min.js )

程式碼 :

<?$this->load->helper('url');?>
<script type="text/javascript" src="<?=base_url()?>assets/javascript/jquery-1.8.3.min.js"></script>

[ASP.NET] 資料庫交易

Asp
---------------------------------------------------------------------------
Dim rs
set rs  = Server.CreateObject("ADODB.Recordset")
on error resume next
conn.Begintrans
                                                 
sql= " 資料庫語法
conn.execute(sql)

if err.number=0 then                               
conn.CommitTrans
else
conn.RollbackTrans    
end if


Asp.net
---------------------------------------------------------------


SqlConnection sqlConn = DB.Conn();
sqlConn.Open();
SqlTransaction sqlTrans = sqlConn.BeginTransaction();
SqlCommand sqlComm.Connection = sqlConn;
sqlComm.Transcation = sqlTrans;

sqlConn = DB.Conn();
sqlConn.Open();
sqlTrans = sqlConn.BeginTransaction();
sqlComm.Connection = sqlConn;
sqlComm.Transcation = sqlTrans;
try{
    for(;;){
        strInsertion = "資料庫語法";
        sqlComm.CommandText = strInsertion;
        sqlComm.ExcuteNonQuery();
    }
    sqlTrans.Commit();
}
catch{
    sqlTrans.Rollback();
}
finally{
    sqlConn.Close();
}


※其他人的備註
2011/08/20 新增關於BeginTransaction, Rollback, Commit的測試:
問題:在寫入資料表的時候關掉網頁,對資料表的狀態?
測試方式:
寫一隻無限迴圈程式,不斷讓程式對資料表寫不同的資料,
然後在執行的過程中關掉網頁。
測試結果:
一開始寫程式的時候沒有用try-catch-finally,所以直接把網頁關掉,資料表會被lock起來,強制把IDE的模擬Server程式關掉後才得以解開。資料沒有寫進去。

後來加入try-catch-finally後,執行的過程把網頁關掉,再去查詢資料表,是可以運作的。資料也沒有寫進去,
由測試結果的推論:
try-catch-finally,是去執行try裡面的動作,遇到Exception的時候再強制跳到catch,無論try完或是catch完,最後都執行finally。直接把網頁關掉,也能夠用這個方式catch出來。

SQL的做法應該是在先把資料表的狀態lock住,然後對資料表的修改和寫入都是寫到一個暫存的地方,等到下commit指令以後,才把結果一次倒進資料表裡。總之,今天討論到,如果程式執行很久,使用者在不知情(或是手賤)的情況下關掉網頁,以這種做法來說,不用擔心資料表會被持續lock住。

狼.眼裡的世界