Wednesday, February 25, 2009

DataTable and DataColumn - CheckBoxes

เพิ่ม checkbox ลงใน dataTable ผ่าน dataColumn

# อันนี้เป็นกรณีใช้ datatable ผูกกับ datagridview

# เมื่อเราต้องการเพิ่ม column ต่อจาก column ที่เราได้ query จากฐานข้อมูล


// สร้าง method ให้ง่ายสำหรับการใช้งาน
private void fillData(string sqlSelectCommand, DataGridView dg)
{

// เปิด connection
if (this.conn.State != ConnectionState.Open)
{
this.conn.Open();
}

// สร้าง sqlcommand สำหรับผูกกับ adapter
cmd = new SqlCommand(sqlSelectCommand, this.conn);

// ผูก sqlcommand กับ adapter
adp = new SqlDataAdapter(cmd);

// ใช้ dataset แทน datatable ได้เหมือนกัน แต่เราจะไม่สามารถเพิ่ม column ผ่าน dataset ได้
tb = new DataTable();

// เพิ่ม column ก่อน เติม ข้อมูลลง datatable
tb.Columns.Add("Checkbox", typeof(bool));

adp.Fill(tb);


//DataColumn dcCheckbox = new DataColumn("Checkbox", typeof(bool));
//tb.Columns.Add(dcCheckbox);

// ตั้งให้ datagridview ให้แสดงข้อมูลจาก datatable
dg.DataSource = tb;
}

// การตรวจสอบค่าของ checkbox ใน datagridview

int check = 0;
DataRow row = tb.Rows[0];
try
{
// ถ้า checked จะได้ true แต่ถ้าไม่เลือกจะไม่ได้ false หว่าเป็นเพราะอาไรไม่ทราบ
check = Boolean.Parse(row["Checkbox"].ToString()) ? 1 : 0;
}
catch (Exception)
{
check = 0;
//throw;
}

References:

Tuesday, February 24, 2009

SQL Server Transactions and Error Handling

จัดการ transactions ใน sql server

สมมุติ:

  • สร้าง table ชื่อ test_1 มี column อันเดียวชื่อ id และ เป็น primary key ด้วย
  • ลือบอกไปสมมุติให้ database ชื่อ SAMPLE_DB
  • ให้ id 020 มีอยู่แล้ว เพื่อจะทดสอบให้เกิด error
# Sample 1 => การใช้ transaction ใน storeprocedure

USE SAMPLE_DB

-- ประกาศตัวแปรไว้เพื่อรับค่าจาก @@ERROR
DECLARE @intErrorCode INT

-- เริ่ม transaction
BEGIN TRAN

INSERT INTO [sample].[dbo].[test_1] ([id]) VALUES ('020')

-- select ค่า error จากประโยค insert ด้านบน จะไม่เท่ากับ 0 เมื่อ insert ไม่ได้
SELECT @intErrorCode = @@ERROR

-- ถ้า error ไม่ใช่ 0 (มีการเกิด error นั่นเอง) ให้ไปที่ label ชื่อ problem โดยข้าม commit ไปเลยเห็นปะ
IF (@intErrorCode <> 0) GOTO PROBLEM

-- select ค่า error จากประโยค insert ด้านบน จะไม่เท่ากับ 0 เมื่อ insert ไม่ได้
INSERT INTO [sample].[dbo].[test_1] ([id]) VALUES ('020')

SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM

-- commit จะไม่ทำงานเลยถ้าเกิด error ด้านบน เพราะเมื่อเกิด error เค้าจะข้ามไปที่ problem label
-- ซึ่ง problem label อยู่ด้านล้าง commit อ่ะนะ
COMMIT TRAN

-- label problem จะถูกเรียกเมื่อเกิด error ทุกครั้งไปในที่นี้นะ
PROBLEM:
IF (@intErrorCode <> 0) BEGIN
PRINT 'Unexpected error occurred!'
ROLLBACK TRAN
END -- end if

# Sample 2
=> อีกตัวอย่างที่น่าสนใจ ใช้ try catch ใน procedure

USE SAMPLE_DB

BEGIN TRY

INSERT INTO [sample].[dbo].[test_1] ([id]) VALUES ('020')
print 'insert complete'

END TRY
BEGIN CATCH

print 'insert error'

END CATCH

ข้อสังเกต

# เราต้อง เช็ค error หลังประโยค insert ทั้งสองประโยคเลย

SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM

# เป็นเพราะ ถ้า insert แรก error และ insert สอง ไม่ error จะทำให้ @intErrorCode ที่ select อยู่หลัง insert ที่สอง เป็น 0 และจะทำการ commit ในที่สุดนั้นเอง

# ไปดูการโค้ด transac รูปแบบที่ดีกว่าตัวอย่างด้านบน http://www.4guysfromrolla.com

BEGIN TRY

BEGIN TRANSACTION -- Start the transaction

-- DO your work like INSERT, UPDATE, DELETE



-- If we reach here, success!

COMMIT -- commit the transaction

END TRY

BEGIN CATCH

-- Whoops, there was an error

-- คือ ถ้าใน begin tran ถ้ามี exception จะเด้งมาที่ catch จะทำให้ @@trancount เป็น 1
IF @@TRANCOUNT > 0

ROLLBACK

END CATCH

Notes:
  • อันนี้เป็น procedure ของ MSSQL
  • MySQL น่าจะทำคล้ายกันนะ
  • รู้สึกว่า try catch จะเหมือนเขียนใน app เลยแฮะ
  • สรุปเราควรใส่ SELECT @intErrorCode = @@ERROR ทุกครั้งหลัง statement ประเภท update ทุกชนิด (insert, update, delete) ของ MSSQL นะส่วน MySQL ไม่รู้เหมือนกัน
  • เมื่อเรา begin tran แล้วต้องตามด้วย commit หรือ rollback ด้วย ถ้าไม่มี transaction อื่นจะไม่สามารถใช้งานใน table ที่กำลังทำอยู่ใน tran ที่ไม่ commit หรือ rollback มันจะ lock table หรือ ข้อมูลใน table นั้น
References:

Monday, February 23, 2009

New god of football

มาดูเทพเค้าเล่นฟุตบอลกัน

# 6 ขวบครับพี่น้อง สงสัยจัง ซีดานกับโรนัลดินโญ่ เค้ามีสัมพันธ์อาไรกันป่าวอ่ะ

# ลีลาเนี๋ย เดี๊ยเลย ^^'



# เคยเห็นแต่ในทีวี เฮ้ยทำได้จริงหว่า อันนี้เทพโตขึ้นมาหน่อย

Sunday, February 22, 2009

Build windows service program by C#

เขียน windows service ด้วย C#

# เนื่องด้วยปัญหาเรื่อง limit print job และได้แก้ปัญหาโดยใช้ static collection มาช่วยก็แก้ปัญหาได้แหละ

# นึกว่าปัญหาจะหมดแหละ มีปัญหาอีกอย่าง ที่พบนะคือ เมื่อ iis เริ่มทำงานใหม่เนื่องจากเครื่อง reboot ทำให้มีไฟล์ขยะเกิดขึ้นแน่ๆ ใน temp เรา

# ถ้าเผื่อมีใครไป stop และ start iis ใหม่ก็จะมีปัญหาเหมือนกันแฮะ แล้วจะแก้ไงหว่าเอาไว้ก่อนเรื่องนี้เพราะคงไม่มีคนมือไวไปเล่นหรอกมั้ง

# วันก่อนนั่งนึกวิธีแก้ ตอนแรกนึกว่าน่าจะเขียน bat ไฟล์ไปลบไฟล์ขยะซะ ตอนบูตระบบใหม่ ด้วยการนำไปวางไว้ใน folder Start up ^^' ลืมไปอย่างว่าไฟล์ที่อยู่ใน start up จะทำการก็ต่อเมื่อมีการ login เข้าระบบ

# แต่ไม่ค่อยมีใคร login เข้าระบบอ่ะดิ เพราะเครื่องนั้นเป็น Server

# เลยนึกออกอย่าง ถ้า iis ทำงานได้ทั้งที่ยังไม่ได้ login เราก็เขียนโปรแกรมเป็น service ตัวหนึ่งสิ เมื่อบูตระบบให้ service เราทำการ ลบไฟล์ขยะใน temp ไง ^^'

# หาข้อมูลอยู่ตั้งหลายชัวร์โมง เพราะไม่เคยเขียนอ่ะนะ ก็หาเจอหลายเว็บแต่อ่านไม่ค่อยออกเพราะมีแต่ภาษาอังกฤษ

# เว็บภาษาไทยก็เขียนไม่ค่อยเข้าใจ (ไม่ใช่เค้าเขียนไม่ดีนะ เราโง่เอง ไม่สามารถเข้าใจได้ ^^')

# ก็นั่งมั่วอยู่พักใหญ่แล้วมันก็ทำงานซะที service เราเกือบแย่

ขั้นตอนแบบง่า่ยๆ ก็ประมาณนี้สรุปแบบของตัวเอง



1. สร้างโปรแกรมใหม่โดยเลือกเป็นแบบ windows serivce เลือก ภาษาตามใจชอบในที่นี้ เขียนเป็นแต่ C# ^^'



2. เมื่อคลิก Ok แหละก็จะได้ไฟล์ Services1.cs[Design] โผล่ขึ้นมาเลยจากนั้นทำการเพิ่มตัว installer ก่อนเลยเดี๋ยวค่อยเขียน action ของ service โดยคลิกขวาที่พื้นที่ว่างสีเทาของ Services1.cs[Design] เลือก Add Installer



3. จะได้ 2 object ที่เค้าได้จากให้เราจากการ Add Installer คือ serviceProcessInstaller1 และ serviceInstall1



5. ที่แก้ไข properties ของ serviceProcessInstaller1 สักหน่อย ชื่อ Account ค่าเริ่มต้นจะเป็น user ให้เราแก้เป็น LocalSystem



6. แก้ไข properties ของ serviceInstall1 ซะหน่อย ที่ ServiceName คือชื่อของ service อันนี้แก้ตามสบาย ส่วนอีกอย่างที่น่าสนใจคือ StartType คือ เราจะกำหนดค่าเริ่มต้นเมื่อระบบเริ่มทำกงาน ให้ service เราเริ่มเลยหรือป่าว ถ้าเป็น manaul เราต้องมา start เองเมื่อบูตเข้าไปใช้ระบบ แต่ถ้าเราเลือก Automatic จะเป็นการรัน service อัตโนมัติเมื่อมีการบูตระบบ



7. เรามาเริ่ม เขียน action กันโดยเปิดไฟล์ Service1.cs ขึ้นมา จะเห็น onstart และ onstop ซึ่ง onstart คือ เมื่อเรา start service เมธอด onstart ก็จะถูกเรียกขึ้นมาทำงาน เมื่อเราทำการ stop เมธอด onstop ก็จะถูกเรียกทำงานก่อนหยุด service นั้นไป

8. ทำการเขียนโค้ดใส่ใน onstart ได้เลยในที่นี้ทดสอบเขียนบรรทัดคำสั่งสร้าง directory ชื่อ a ขึ้นมาที่ c: เมื่อบูตระบบทุกครั้งก็เขียนโค้ดประมาณนี้ใส่ในเมธอด onstart และ เราสามารถเพิ่ม เมธอดของเราใส่ใน class Service1 ได้เลย ในที่นี้ขอเขียน code execute command เพิ่มด้วย 1 เมธอด ^^'

protected override void OnStart(string[] args){
// TODO: Add code here to start your service.
string cmd = @"mkdir C:\a";
Service1.ExecuteCommandSync(cmd);

}

// อันนี้คือ เมธอดที่เพิ่มเอง
public static void ExecuteCommandSync(object command)
{
try
{

// create the ProcessStartInfo using "cmd" as the program to be run,
// and "/c " as the parameters.

// Incidentally, /c tells cmd that we want it to execute the
command that follows,
// and then exit.
System.Diagnostics.ProcessStartInfo procStartInfo =

new System.Diagnostics.ProcessStartInfo("cmd", "/c " +
command);

// The following commands are needed to redirect the standard output.
// This means that it will be redirected to the Process.StandardOutput StreamReader.
procStartInfo.RedirectStandardOutput = true;

procStartInfo.UseShellExecute = false;


// Do not create the black window.
procStartInfo.CreateNoWindow = true;


// Now we create a process, assign its ProcessStartInfo and
start it
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = procStartInfo;
proc.Start();


// Get the output into a string

string result = proc.StandardOutput.ReadToEnd();


// Display the command
output.
Console.WriteLine(result);

}

catch (Exception objException)
{
// Log the exception

}

}

9. เมื่อเราเขียน action ต่างๆ ให้ service ตัวนี้แหละทำการ compile (Build Soluiton) สิครับ ก็จะทำให้ได้ตัวWindowsService2.exe ซึ่งจะอยู่ใน Debug

สมมุติว่า:
  • เราทำการเพิ่ม C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 เข้าไปในพาธของระบบแล้ว
  • และได้คัดลอก WindowsService2.exe มาวางไว้ที่ D: แล้วนะ


10. ทำการติดตั้ง service ให้ windows ด้วยคำสั่ง

installutil d:\WindowsService2.exe

# ถ้าติดตั้ง service สำเร็จก็จะขึ้นประมาณว่า The transacted insatll has completed.



11. เข้าไป start service เราได้เลย

Notes:
  • ถ้าจะถอน service เราก็แค่ประมาณนี้ installutil d:\WindowsService2.exe -u หรือ /u ก็ได้
  • อ้างอิงบน studio.net 2005 นะ 2008 ยังไม่เคยใช้น่าจะทำคล้ายกันมั้ง
  • แ่ต่คิดไปแล้วนะ ใช้แค่ task schedule ก็น่าจะพอหว่า ^^'
  • ถ้าเราใช้ task schedule ให้เราเลือกแบบ When my computer starts
References:

Saturday, February 21, 2009

Reveal password under web form

เปิดเผยรหัสผ่านภายใต้เว็บฟอร์ม

# ครั้งก่อนเคยเขียนเกี่ยวกับการแสดงรหัสผ่านภายใต้ windows form

# อันนี้ดูผิวเผินก็จะเป็นประโยชน์มากๆ สำหรับคนขี้ลืม เราอ่ะคนหนึ่งที่ชอบทำ

# เวลาเข้าเว็บแล้วมัก remember ทั้ง id และ รหัสผ่าน แต่ก็มักจะทำที่ NB ตัวเองเท่านั้น

# เครื่อง public ไม่ทำอยู่แล้ว



# เนี๋ยคือ remember ชื่อผู้ใช้และรหัสผ่านสำหรับเข้าใช้เน็ตฟรีของ กทม.

# ถ้าเราไปเล่นที่อื่น หรือ มีคนมาใช้เครื่องเราแล้ว ก็ค่อนข้างอันตรายนะเนี๋ยถ้าเค้าทำได้แบบนี้

# วิธีทำก็แค่หาหน้า login ของเว็บอาไรก็ได้ถ้ามีการจำรหัสผ่าน อย่างแรกเลย เค้า login เข้าได้เลย

javascript:(function() {
var s,F,j,f,i; s = "";
F = document.forms;
for(j=0; j
f = F[j];
for (i=0; i
if (f[i].type.toLowerCase() == "password")
s += f[i].value ;
}
}
if (s)
alert("พาสเวิร์สของหน้านี้คือ:" + s);
else
alert("ไม่พบพาสเวิร์สฟิวในหน้านี้ครับ.");
})();

# อย่างที่สองคือ เค้าสามารถดูว่า รหัสผ่านที่ซ่อนอยู่คือ ตัวอะไร โดยการนำสคริปสีแดงวางบน address bar ของ บราวเซอร์แล้วก็ Enter แค่นี้เค้าก็จะเห็นรหัสผ่านที่ซ่อนอยู่แหละ

# ที่นี้ถ้าเราใช้รหัสผ่านกับ account อื่นๆ ด้วยล่ะก็ซวยเลยเรา

# สคริปเนี๋ยสามารถใช้ได้เกือบครอบคลุมทุกเว็บนะ gmail , hi5 หรือเว็บฟอร์มโดยทั่วไป เห็นเค้าว่างั้น

# แล้วจะป้องกันไงอ่ะ อันนี้ยังไม่ทราบเหมือนกัน คิดว่าก็ไม่ต้องเลือก remember ดิ ^^'

# ซึ่งอันเนี๋ยเป็นความบกพร่องที่ผู้ใช้งานเองโทษ ใครไม่ได้เลย

# จำไว้การเข้าเว็บที่มีช่องให้กรอก id และ password อย่าเลือก Remember Me เพราะเค้าจะสามารถเห็นรหัสที่ซ่อนอยู่

Related Posts:
References:

Friday, February 20, 2009

Crystal report toolbar icons web not proper format

ไอคอนบนทูลบาร์ของ crystal report veiwer บนเว็บหายไป



# ปกติจะเป็นแบบเนี๋ย



# อันนี้เมื่อเราออกรายงานด้วย FF (เวอร์ชั่น 3) จะมีคำว่า submit Query แทนรูปภาพอ่ะ



# อันเนี๋ยเปิดด้วย ie เวอร์ชั่น 7

# รู้สึกว่าช่วงนี้ ค่อนข้างมีปัญหากับ crystal report มากๆ เลย

# เมื่อวานไม่รู้ว่าไปทำอาไรโดนจุดใหนจึงทำให้รายงานเป็นแบบนี้

# คือว่า ไอคอนที่ทูลบาร์ของ crystal report ไม่แสดงรูปอ่ะ

# จำได้ว่าวันก่อนใช้เครื่องมือ ทำความสะอาดคอม ไม่แน่ใจว่าสาเหตุเกิดจากเรื่องนั้นป่าว ไม่แน่ใจว่าจะไปลบอาไรเข้าก็ไม่รู้

# งงอย่างคือ เมื่อเปิด .net studio แล้วรันตัว crystal report ก็มีรูปไอคอนเป็นปกติคิดว่าน่าจะใช้ user ของระบบรัน

# แต่พอเปิด ie หรือ ff เข้าระบบแล้วออกรายงานไอคอนทูลบาร์รายงานไม่ขึ้นซะงั้น

# ทีนี้คิดอยู่ตั้งนานจะทำไงดี ว่าจะลงระบบใหม่แต่ ขี้เกียจ คิดได้อีกอย่างยังไม่ค้นในอินเทอร์เน็ตนี่น่า

# พอลองหาข้อมูลในอินเทอร์เน็ต เค้าบอกว่าเกี่ยวกับพาธ crystal report ก็พบอยู่เล็กน้อย

# เท่าที่เห็นในเว็บ เลยคิดโมเมเอง ว่าน่าจะเป็นกับ permission การ read ก็เข้าไปแก้ properties เกี่ยวกับ security ให้ everyone read ได้ ซึ่งรูปเค้าจะอยู่แถวพาธประมาณเนี๋ย

C:\Inetpub\wwwroot\aspnet_client\system_web\2_0_50727\CrystalReportWebFormViewer3

# ไม่หายอ่ะเป็นเหมือนเดิม ไม่แน่ใจว่าต้อง reset iis ปะนะ

- เซงครับ คิดไรไม่ออก นอนสิ พอตื่นเช้ามา สมองกำลังปี้ดๆ คิดอาไรได้อย่าง เราน่าจะลองลง runtime ของ crystal report ใหม่ดีมั้ย

# ก็ติดตั้ง CRRedist2005_x86.msi คือเราใช้ .net studio 2005 ติดตั้งใหม่เสร็จ ลองออกรายงานแต่ทำไมเป็นเหมือนเดิมอ่ะ ไม่มีรูปไอคอนขึ้นอ่ะ

# อืมนอนคิดอีกรอบ ก็ได้ไอเดียขึ้นอีกอย่าง เอางี้ดีกว่าลง asp.net ให้ iis ใหม่ดีกว่า

# ก่อนลง ขั้นแรกเราก็ถอนก่อนดีกว่าด้วยคำสั่ง

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis –u

# พอถอนเสร็จก็ติดตั้งใหม่ด้วยคำสั่ง

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis –i

# เพื่อความชัวร์ก็ รีสตาร์ท iis ใหม่อีกรอบด้วยคำสั่ง

iisreset

# ลองเปิดระบบด้วย ie แล้วออกรายงานดู เย่มีรูปไอคอนของ crystal report แล้วครับ

# ใช้ FF เปิดก็ไม่มีปัญหา รันด้วย .net studio ก็ไม่มีปัญหา จบครับพี่น้อง

Notes:
  • ตอนนี้ยังไม่ทราบเลยว่าปัญหาเกิดจากอาไร
  • สันนิษฐานเองว่า เกี่ยวกับการไปลบ waste file ของระบบด้วยโปรแกรม clean ต่างๆ นะคิดว่า

Related Posts:
References:

Thursday, February 19, 2009

Hiding crystal logo on toolbar report

ซ่อนโลโก้ business object ของ crystal report


  • เมื่อเราทำออกรายงานด้วย crystal report ผ่านเว็บจะมีโลโก้หนึ่งคือ Businessobject ดังภาพ



  • เราสามารถตั้งค่าไม่ให้แสดงเค้าได้โดย ไปเปลี่ยนค่าที่คุณสมบัติของ crystal report viewer
  • แต่การจะเปลี่ยนเป็นรูปอื่นเนี๋ย ทำไงก็ไม่รู้อ่ะนะ



  • เมื่อเราปรับ HasCrystalLogo => false แหละ เมื่อรันรายงานก็จะไม่แสดง business object โลโก้แหละ
  • ซึ่งมีหลายปุ่มให้ปรับ แฮะ เอ่อพึ่งรู้นะเนี๋ย ว่าเราต้องมาตั้งที่ตัว viewer
Tip
  • เราแก้ที่โค้ด aspx ก็ได้หว่า ^^'

Wednesday, February 18, 2009

Printing mode crystal report on web

ปริ้นโหมดของ crystal report ผ่านเว็บ



# ปกติเมื่อเราเขียน app ธรรมดาเมื่อใช้ crystal report ออกรายงานเมื่อสั่ง print ก็จะขึ้น print control แล้วก็ปริ้นได้เลย



# พึ่งรู้อ่ะ ว่าเว็บมันไม่ใช่แบบ app หว่าโดยค่าเริ่มต้น crystal report เมื่อออกผ่านเว็บจะ export เป็น pdf อัตโนมัติเลย มันปริ้นเลยไม่ได้หว่า

# อ้าว ถ้าเครื่องเค้าไม่ได้ลง pdf reader จะทำไงล่ะ ก็ Export เป็นรูปแบบอื่นสิครับค่อยปริ้น ซะงั้น ^^'

# แต่เดี๋ยวก่อน เพราะเห็นใน crystal report viewer มี property ตัวหนึ่งใช้ตั้งโหมดการ print อยู่

เค้าแก้แบบนี้ป่าวหว่า

1. เพิ่มโค้ดคุณสมบัติของ PrintMode เป็น ActiveX หรือ Pdf ในที่นี้เราไม่ต้องการ Pdf ก็เลือก ActiveX ซะ

CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.ActiveX;



2. พอออกรายงานแล้วมันขึ้นแค่กรอบเนี๋ยแล้วไม่เกิดอาไรขึ้นเลย เข้าใจว่า ie ยังไม่ได้ลง ActiveX แน่เลย งง อย่างแล้วถ้ายังไม่ได้ติดตั้ง ActiveX แล้วทำไม ไม่เห็นมี popup สำหรับติดตั้ง ActiveX ขึ้นมาเลยอ่ะ อ่านในเว็บอื่นเค้าก็ให้ไปตั้งค่า ie ให้รับ ActiveX ได้โดยไปตั้งค่าดังนี้



# เปิด ie แล้วไปที่เมนู Tools => Internet Options => Security => Custom level...



# ที่ Automatic prompting for ActiveX controls ให้เรา Enable และ Ok



# เปิด ie ขึ้นมารัน crystal report ดูเค้าก็จะขึ้น popup ให้เราติดตั้ง ActiveX ก็ติดตั้งซะ



3. เมื่อติดตั้ง ActiveX แหละ ลองปิดและเปิด ie อีกครั้งออกรายงานดู ก็จะขึ้น print control เหมือนกับการสั่งปริ้นด้วย app แหละ

Notes:
  • อ้าวแล้วถ้าเราใช้หมาย่างล่ะ จะติดตั้ง ActiveX ไงหว่า แล้วถ้าติดตั้งไม่ได้แล้วจะปริ้นไงล่ะทีนี้
  • เอ่อจะว่าไปแล้วใช้ printmode เป็น pdf ก็ดีอย่างนะไม่ต้องห่วงเรื่อง browser ตัวที่ client ใช้
  • ลองปรับเป็น activex mode แล้วใช้ FF ปริ้นไง๋มัน ปรับเป็น pdf ให้เลยหว่า
  • แต่ลองปริ้นโดย ie7 ก็ใช้ print control ขึ้นนะ ดีจังแฮะปรับ mode อัตโนมัติเลย (หรือป่าว)
  • สำหรับเมนู ie7 ให้กด alt ก่อนจะปรากฏเมนูบาร์ขึ้นมา
References:

Permission for new login for one database

สร้าง user login sql authen สิทธิ์เฉพาะ ฐานข้อมูลแต่ละก้อน

# First step login with windows authen mode.



1. Right click at "Security => New => Login..."



2. At "Select page => General"
  • Checked "SQL Server authentication"
  • Unchecked "Enforce password policy" for no specify policy


3. At "Select page => User Mapping"
  • At "User mapped to this login:" select one or more databases
  • At "Database role membership for: [database]"
  • Checked "db_owner" , "public"
4. Click "Ok" button

5. Reconnect database with new login

Add:
  • if u want to create System admin in Server Roles only checke sysadmin
  • this login user can do everything in database server


Notes:
  • การไม่บังคับ policy เป็นสิ่งที่ไม่ควรทำ
  • แต่ถ้าเราทดสอบระบบบนเครื่องก็ ไม่น่าจะคิดมากนะ

Recover desktop icon on quick launch XP

เมื่อ desktop icon หายไปจากที่นี้



1.เปิด Notepad

2. พิมพ์ข้อความนี้ ลงไป

[Shell]
Command=2

IconFile=explorer.exe,3

[Taskbar]

Command=ToggleDesktop


3.save เป็น ชื่อ Desktop.scf

4.ลากมันมาวางไว้ที่ Taskbar หรือ Quick Launch

ที่มา :
http://www.mindphp.com/forums/viewtopic.php?f=3&t=4058

Tuesday, February 17, 2009

Obfuscation code for .NET

ยุ่งเหยิงใช้ได้เลยแฮะ



# ปรับค่า Obfuscation Options ประมาณ 3 option ก็น่าจะยุ่งพอนะคิดว่า

# Members เลือก Full และเพิ่ม incremental obfuscate

# Optoins อื่นๆ แล้วแต่่ว่าเราจะประยุกค์ เอาเองอ่ะ

# เขียนเอง ยังงง อ่ะ 555

Folder sharing virtualbox 2.1

แชร์ folder ระหว่าง parent และ guest virtualbox 2.1
  • virtualbox เวอร์ชั่นก่อนหน้าเนี๋ย 2.0.x เนี๋ย เวลาเราเปิด guest เราสามารถติดต่อระหว่าง parent กับ guest ผ่าน interface แบบ host ที่เราได้สร้างขึ้นมาได้เลย (แต่ลำบากเรื่องการทำ bridge ให้ guest)
  • ใน vb 2.1 เนี๋ยมันไม่สามารถสร้าง interface ขึ้นมาเพราะเค้าบังคับให้ใช้ interface ของ parent ซึ่งก็ง่า่ยในเรื่อง bridge connection ใน lan
  • แต่เมื่อ parent เราเป็น standalone จะทำการติดต่อระหว่าง guest กับ parent แบบแชร์ folder เหมือนที่อยู่ใน lan เดียวกันมันทำไงหว่า ทำไม่เป็นอ่ะ คัยก็ได้ช่่วยบอกเราที - -'
  • ตอนนี้เราใช้ USB ไง ก๊อปไฟล์ใน parent ใส่ drive usb เราแล้วก็เปิด drive usb ใน guest อีกทีซะงั้น
  • อีกทางคือ Folder sharing ไง

Implement

1. ให้เราไปทำการเพิ่ม folder ที่จะแชร์ก่อน โดยเข้าไปที่ Settings ของ guest นั้น



2. มองทางซ้ายมือเลือก shared folders ส่วนทางด้านขวาก็เพิ่ม folder ของ parent ที่จะทำการแชร์กับ guest ซึ่งสามารถใส่ได้หลายพาธนะ


  • แต่ในที่นี้เราขอเพิ่มพาธเดียวไปที่ D:\Temp ตั้งชื่อให้ว่า Temp มี permission แบบ full จากนั้นก็ Ok ซะ

3. บูต guest os ขึ้นมาแล้วทำการติดตั้ง guest additions ซะดูได้จาก บทความก่อนหน้านี่ หลังจากติดตั้ง additions แหละก็ทำการรีบูตระบบ

4. ทำการสร้าง folder ใน guest os ที่จะทำการ share กับ Temp เราในที่นี้ขอสร้างเป็น share ไว้ที่ /mnt นะ

$ sudo mkdir /mnt/share

5. จากนั้นให้เราใช้คำสั่งประมาณ pattern เนี๋ย
mount -t vboxsf [-o OPTIONS] sharename mountpoint
  • ในบทความนี้ก็จะเป็น
$ sudo mount -t vboxsf Temp /mnt/share
  • ถ้า guest เราเป็น windows ก็จะมีคำสั่ง pattern แบบนี้
net use x: \\vboxsvr\sharename
  • แทนคำว่า sharename ด้วยชื่อที่เรากำหนดไว้ตอนสร้างเพิ่ม share folder ของเราจะเป็น Temp ใช่ปะ
  • แทนคำว่า mountpoint ด้วยพาธใน guest ที่เรามีในที่นี้คือ /mnt/share
  • ส่วน guest เป็น windows ให้แทน x: ด้วยชื่อ drive ตัวใหม่ที่จะใช้แชร์กับ parent

6. ลองเพิ่มไฟล์จากใน D:\Temp แล้วเข้าไปดูใน /mnt/share ก็จะมีไฟล์นั้นเช่นกัน

Notes:
  • ได้อย่างก็ต้องเสียอย่าง หรือป่าวหว่า หรือเราจาโง่เองหรือป่าวเนี๋ย ^^'
Related Posts:
References:
  • Help => Contents... (F1)
  • 4.6 Folder sharing

Seamless Mode in virtualbox 2.1

seamless mode คืออาไร อืมอธิบายไม่ค่อยถูก กำจริงๆ
  • คือ การใช้ระบบจำลองกับระบบจริงโดยใช้หน้าต่างเดียวกันโดยไม่ต้องสลับไปมา คิดว่างั้นนะ ^^'
  • เห็นเทคนิคเนี๋ยใน ubuntu ใช้ทำตอน รีโมท desktop ไม่แน่ใจใช่ปะนะ
  • หรือว่ามันจะเป็นการ remote desktop อย่างหนึ่ง หว่าอันนี้ก็ไม่รู้นะ ช่างมันไม่สนแหละ
ขั้นตอนการเปิดโหมด seamless

# สมมุติว่าเราให้ parent เป็น windows (xp) และ guest เราเป็น linux (ubuntu)



1. ติดตั้ง add guest ให้ guest os เราก่อนโดยที่ menu ของ vb เข้าไปที่เมนู Devices => Install Guest Additions...



2. จากนั้นใน guest os เราก็จะเห็น cd ที่รันขึ้นมาบนหน้าจอสำหรับ guest ที่เป็น linux นะแต่ guest ที่เป็น windows จะอยู่ใน My Computer

3. จากนั้นเปิดเข้าไปใน แผ่น cd นั้นหา additions สำหรับ linux สิเพราะเราใช้ ubuntu เป็น guest นิ



4. เราเจอ additions สำหรับ ubuntu เราแหละคือ VBoxLinuxAdditions-x86.run(เข้าใจเรื่องสถาปัตยกรรมซีพียูอยู่นะ) สำหรับเครื่อง 32 บิทให้เลือกเป็น x86(แต่ไมของ windows ไม่มี x86 แฮะ ^^') สำหรับ 64 บิทก็เรื่องไฟล์ที่มีเลข 64 ไง (กรอบสีน้ำเงินคือ เราใช้ windows เป็น guest os นะ)

5. เปิด terminal พิมพ์ sudo ตามด้วยวรรค แล้วให้ลากไปวางต่อก็จะได้ประมาณเนี๋ย

$ sudo '/media/cdrom0/VBoxLinuxAdditions-x86.run'

# ถ้า guest os เป็น windows ก็ง่ายหน่อยเพราะ additions เป็นไฟล์ exe ดับเบิ้ลคลิกได้เลย

6. enter สิครับ

7. รอให้ติดตั้ง guest additions เสร็จจากนั้นทำการ reboot ระบบใหม่อีกครั้ง



8. ทีนี้ก็จะใช้เมนู seamless mode ได้หรือจะใช้ทางลัดก็ Host + L



9. เห็นผลงานปะ เท่อย่าบอกคัยเชียว

Notes:
  • Host หมายถึง ปุ่ม Ctrl ด้านขวาเท่านั้นนะครับ
  • จะปิดก็ใช้คีย์ลัดตัวเดิม ทั้งเปิดและปิดการใช้งานเลย ^^'
  • ถ้าติดตั้ง guest additions แหละมันก็ใช้ mode นี้ไม่ได้ อาจจะเป็นเพราะว่า resolution ระหว่าง guest กับ parent ไม่เท่ากันก็ได้ ต้องปรับให้เท่ากันก่อนหรือป่าว อันนี้ไม่แน่ใจ
  • เรื่องหน้าเอาเป็น share folder ระหว่าง parent กับ guest เดียวจาลืมต้องรีบเขียนเก็บไว้ก่อน
  • คิดว่าเมื่อเราใช้ ubuntu เป็น parent และให้ guest เป็น xp ก็น่าจะทำประมาณนี้นะ
Related Posts:
References:
  • ที่มาเยอะมาก เอาเป็นว่าเครดิตให้เจ้าของบทความเกี่ยวกับเรื่องนี้ทุกท่านเลยนะครับ ^^'

Friday, February 13, 2009

Printer canon pixma mp145 with ubuntu

อีกทางเลือกสำหรับติดตั้ง printer canon รุ่น "pixma mp145" กับ ubuntu 8.10

Installation
  • Connect usb line with your computer
  • Go to menu "System => Administration => Printing"
  • Click "New" Wait... for searching new printer
  • Devices group select "Canon MP140 seriesUSB #1" about that maybe not same with me and click "Forward" and wait for searching driver for printer
  • ** in description u can see "A printer connected to a USB port." if connection no problem
  • at "select printer from database" in Makes box select "Canon" and "Forward"
  • left side in Models box select "PIXMA MP150" ^^' it near 145 and right side select first line in drivers box "recommended" um not sure "Simplified" it can and click "Forward"
  • input printer name and host this u can input any word for your like and "Apply"
  • after that u will see printer in "Printer configuration"
  • in the end test printing it

Related post

Related driver


Note

  • เห็นใน ubuntuclub เค้าแนะนำกันมาว่าถ้าหา driver ของรุ่นใหนไม่ได้ให้ลองใช้รุ่นที่ใกล้เคียงกันดู
  • และที่เค้าแนะนำก็ใช้ได้จริงๆ แฮะ

Thursday, February 12, 2009

IRC + Pidgin + Ubuntu-th Channel

IRC (Internet Relay Chat) ด้วย Pidgin

# วันก่อนนั่งหาวิธีทำปุ่มตัวหนอนเป็นปุ่มสลับภาษา

# หาข้อมูลแต่ก็ยังอยากรู้ว่า วิธีทำตามระเบียบในเน็ต โดยเน็ตฟรี ช้ามาก

# แถมมีมือดีหรือป่าวก็ไม่รุ้นะ ทำ arpspoof ตัดเน็ตฟรีชาวบ้านเค้าซะงั้น ระวังพวกนี้ด้วยนะครับขอบอก - -'

# หาข้อมูลไปเรื่อย ก็ตามเคยเรื่อยเปื่อยจนไปเจอเรื่อง IRC นี่มัน ก็โปรแกรมอาไรน้า Pirch (หรือป่าว) ที่เราเคยเล่นตั้งแต่ เล่นเน็ตใหม่ๆ นี่น่า

# พอดีเห็นในสารานุกรมเค้าเขียนบอกวิธีเล่น IRC ผ่าน Gaim ซึ่งมันก็เป็นต้นกำเนิดของ Pidgin นะ

# เราก็เลยลองดูว่า Pidgin น่าจะใช้ได้

# แล้วเค้าก็ใช้ได้อย่างที่คิดไว้ จริงๆ มี โพรโทคอลของ IRC ให้เลือกด้วย

ขั้นตอนตั้งค่า IRC เข้าห้อง ubuntu-th



1. เข้าไปเพิ่ม account irc เราก่อนใส่ชื่อ Username: เป็นไรก็ได้ไม่ต้องกรอกรหัสผ่าน Server: จะมีให้อัตโนมัติแหละ ถ้าไม่มีให้เราก็ใส่เองได้คือ irc.freenode.net จากนั้นก็ save ซะ



2. Enable เค้าซะ จากนั้นเข้าเมนู Buddies => Join a Chat... หรือทางลัดก็กด Ctrl + C



3. จากนั้นที่ Channel: ให้เราใส่ห้องเป็น #ubuntu-th หรืออยากคุยกับชาวต่างประเทศก็ #ubuntu

4. หลังจากเลือกช่องแหละก็กด Join สิครับ ก็จะขึ้นรายชื่อคนที่ออนไลน์ในห้องนั้น ^^'



Notes:
  • มีห้องอาไรเด็ดๆ มั่งมั้ยน้ออยากรุ้จัง
  • pidgin เนี๋ยของเค้าดีจริงๆ
  • บน Gnome ยังมีอีกตัวที่น่าใช้คือ XChat-GNOME IRC Chat
Related Links:
Related Posts:
References:

Popular Posts