Saturday, June 04, 2005

Menggunakan MySQL sebagai database

Kelemahan menggunakan access adalah sangat lambat. sedangkan SQL Server harganya sangat mahal. Kita juga sulit mencari server yang menyediakan SQL Server dengan harga yang murah.
Solusinya adalah dengan memakai MYSQL database yang cukup cepat dan terkenal dan
gratis

untuk menjalankan MySQL kita harus mendownloadnya dulu dan
juga mendownload driver ODBC nya
(pilih Windows Downloads Driver Installer)

untuk connectionstring nya memakai
"DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=testdatabase"


contoh dibawah ini memakai MySql sebagai databasenya
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Odbc" %>
<%@ Page Language="C#" %>


public void Page_Load(Object sender, EventArgs e) {
DataTable dtRecords = GetDataTable("SELECT * FROM newone");
foreach(DataRow dr in dtRecords.Rows) {
Response.Write(dr["FirstName"].ToString() + " " + dr["LastName"].ToString() + "
");
}
}

private static string GetConnection() {
return "DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=testdatabase";
}
public static DataTable GetDataTable(string sql) {
DataTable rt = new DataTable();
DataSet ds = new DataSet();
OdbcDataAdapter da = new OdbcDataAdapter();
OdbcConnection con = new OdbcConnection(GetConnection());
OdbcCommand cmd = new OdbcCommand(sql, con);
da.SelectCommand = cmd;
da.Fill(ds);
try {
rt = ds.Tables[0];
}
catch {
rt = null;
}
return rt;
}

Beda session dengan application

ini mungkin sudah pernah ditanyakan sebelumnya, tapi berhubung belum ada yang membahas, maka singkatnya perbedaannya adalah:

session itu "seolah" variabel local bagi server dari semua client. pada suatu situs, misalnya untuk login menggunakan session, itu cukup wajar, karena misalnya session("username") dan session ("password") pada client A, client B, client C dan seterusnya secara normal adalah berbeda!
misalnya setelah tombol submit ditekan oleh client A dahulu baru client B (untuk site yang sama) maka server akan menerima session untuk client A usernamenya "AAA" dan paswordnya "passAAA" dan setelahnya session untuk client B usernamenya "BBB" dan passwordnya "pasBBB"
session-session untuk Client A nilainya tetap session("username")="AAA" dan session("password") ="passAAA" tidak terpengaruh oleh isi session client B, dan demikian seterusnya untuk client selanjutnya session untuk client B tidak akan dipengaruhi session client C yang melakukan submit, dan seterusnya lebih jauh lagi...

Sedangkan application, itu seolah adalah variabel global dari server untuk semua client. Misalnya untuk situs lelang, katakanlah application("hargamobilkuno") Misalkan client A menawarkan $1000, maka nilai application("hargamobilkuno")="1000"
Begitu client B mengakses application tersebut, nilainya adalah "1000" bukan null atau undefined. Dan bila client B melakukan penawaran $1500, maka nilai menjadi berubah untuk application("hargamobilkuno")="1500" dan pada saat client A mengakses application("hargamobilkuno") nilainya sudah berubah menjadi "1500" begitu seterusnya. Bila ada client C melakukan perubahan pada application("hargamobilkuno") maka client A dan B akan mengetahui perubahan tersebut, demikian seterusnya...

Jadi kesimpulannya, session digunakan untuk menyimpan nilai yang butuh personalisasi client, dimana setiap client mempunyai nilai yang berbeda (meskipun mungkin juga kebetulan sama). update nilai session dari satu client tidak akan mempengaruhi session client yang lain.

sedangkan application digunakan untuk menyimpan nilai yang "dipublikasikan" di server, dimana update yang dilakukan satu client pada application tersebut berpengaruh pada client-client yang lainnya saat mengakses application tersebut

Property dan Method pada BCL untuk pengaturan warna

Biasanya untuk mengubah warna tampilan, user bisa memakai 3 cara, yaitu yang pertama adalah dengan representasi heksadesimal seperti
"#FFFF00", "#000000"...
Kedua, Menggunakan nilai desimal dalam css seperti rgb(255, 255, 0)" ...
Atau yang ketiga, menggunakan nama warnanya langsung seperti "yellow" .... dan lain sebagainya seperti black, white, ...

pada System.drawing.color tersedia beberapa method dan property untuk "bermain-main" dengan warna. Salah satu properti staticnya adalah seperti Color.red (seperti namanya, warna merah), Color.Black, dan sebagainya. Sedangkan properti-propertinya untuk RGB dan representasi heksadesimalnya menggunakan:

1. Color.FromArgb(red, green, blue)

misalnya untuk membuat background textbox menjadi Dark Hard Yellow contohnya:
'VB.NET...
TextBoxID.BackColor = Color.FromArgb(204, 204, 0)

// C#...
TextBoxID.BackColor = Color.FromArgb(204, 204, 0);

(catatan: saat ini hanya memungkinkan pada browser Internet Explorer)

2. ColorTranslator.FromHtml(string)
Untuk kasus yang sama, misalnya pada label contohnya:
'VB.NET...
LabelID.BackColor = ColorTranslator.FromHtml("#CCCC00")

// C#...
LabelID.BackColor = ColorTranslator.FromHtml("#CCCC00");

Sunday, May 29, 2005

Method pada .NET BCL untuk mendapatkan ekstensi file dan nama lengkapnya

.NET Framework BCL (Base Class Library) memiliki sebuah path class dalam namespace System.IO yang punya banyak sekali method yang berguna, static properties untuk pengolahan filepaths, dimana user dapat lebih "dimanjakan" daripada perlu membuat serentetan coding untuk memotong string hanya untuk mendapatkan ekstensi file dan nama filenya tanpa path lengkapnya. Berikut ini adalah 2 contohnya

Path.GetExtension(string)
Bila user memiliki sebuah filepath dan ingin mengetahui ekstensi file nya, dapat menggunakan method ini:

Pada VB.NET, untuk mendapatkan ekstensi ".jpg" pada variabel EkstensiFile:
Dim EkstensiFile as String = System.IO.Path.GetExtension _("C:\MyApp\Images\Skyline.jpg")

Pada C#, untuk melakukan hal yang sama:
string EkstensiFile = System.IO.Path.GetExtension _
(@"C:\MyApp\Images\Skyline.jpg");


Path.GetFileName(String)
Method pada BCL ini dapat digunakan untuk mendapatkan namafile tanpa direktori-direktori path dimana file tersebut disimpan, dan yang didapatkan adalah hanya nama file sekaligus ekstensinya

Pada VB.NET, untuk mendapatkan "Skyline.jpg" pada variabel NamaFile:
Dim NamaFile as String=System.IO.Path.GetFileName("C:\MyApp\Images\Skyline.jpg")

Pada C#, hal yang sama:
string NamaFile=System.IO.Path.GetFileName(@"C:\MyApp\Images\Skyline.jpg");

Tuesday, May 24, 2005

Mengatur cookie pada ASP.NET

// Cara membuat cookie
// Contoh nama cookie = cakes
HttpCookie myCookie = new HttpCookie("cakes");
// menambahkan key pada cookie-nya
myCookie.Values.Add("muffin", "chocolate");
myCookie.Values.Add("babka", "cinnamon");
// menambahkan cookie ke cookie collection
Response.Cookies.Add(myCookie);
// mengambil nilai dari cookie
Response.Write(myCookie.Value.ToString());
// mengambil nilai dari key pada cookie
Response.Write(myCookie["babka"].ToString());
// set waktu expired dari cookie
myCookie.Expires = DateTime.Now.AddHours(12);
myCookie.Expires = DateTime.Now.AddDays(7);
// men-setting path cookie
myCookie.Path = "/forums";
// men-setting domain untuk cookie.
myCookie.Domain = "forums.geekpedia.com";
// menghapus cookie dengan men-set waktu expire menjadi -1
myCookie.Expires = DateTime.Now.AddDays(-1);
// menghapus key dari cookie
myCookie.Values.Remove("babka");

Mengirim Attachment melalui email

// class-class pada System.Web.Mail
//MailAttachment --> untuk membuat attachment email
//MailMessage --> untuk membuat email message
//SmtpMail --> untuk mengirim email melalui SMTP

// deklarasi system.web.mail

// membuat var dari class MailMessage()
MailMessage MyMail = new MailMessage();
//properti pada class MailMessage
//Attachments ---> daftar file-file attachment yang hendak dikirim dengan email
//Body ---> body untuk email
//From ---> email pengirim
//Subject ---> subject email
//To ---> email tujuan

// mencantumkan path file yang hendak di attachmentMailAttachment
MyAttachment = new MailAttachment("C:\\My Folder\\MyFile.txt");
// menambahkan file attachment yang hendak dikirim
MyMail.Attachments.Add(MyAttachment);
// mengirim email
SmtpMail.Send(MyMail);

Mengirim email dari ASP NET

//Menggunakan Import = "System.Web.Mail"

// Procedure SendMail
Sub SendMail (Obj As Object, E As EventArgs)
Dim mailObj AS new MailMessage
mailObj.From = MsgFrom.text
mailObj.To = MsgTo.Text
mailObj.Subject = MsgSubject.Text
mailObj.Body = MsgBody.Text
SmtpMail.SmtpServer = "localhost"
SmtpMail.Send(mailObj)
End Sub

Send To: (asp:Textbox id="MsgTo" runat="server")
Send From: (asp:Textbox id="MsgFrom" runat="server")
Message Subject: (asp:Textbox id="MsgSubject" runat="server")
Message Body: (asp:Textbox TextMode="multiline" Rows="5" id="MsgBody" runat="server")


(asp:button Text="Send" onclick="SendMail" id="Send" runat="server")

Membuat dynamic image thumbnail

public class ImageHandler : IHttpHandler
{ // ukuran maksimal dari Thumbnailnya
const int MaxDim = 120;
public void ProcessRequest(HttpContext ctx) {
ctx.Response.ContentType = "image/jpeg";
ctx.Response.Cache.SetCacheability(HttpCacheability.Public);
ctx.Response.Cache.SetExpires(DateTime.Now.AddDays(1));

// mencari directory dimana imagenya tersimpan
string imageDir = ConfigurationSettings.AppSettings["imageDir"];
imageDir = Path.Combine(ctx.Request.PhysicalApplicationPath, imageDir);

// mencari image yang dicari
string file = ctx.Request.QueryString["File"];
file = Path.Combine(imageDir, file);
// load image
using (Image img = new Bitmap(file)) {
// mengubah ukuran gambar
int h = img.Height;
int w = img.Width;
int b = h > w ? h : w;
double per = (b > MaxDim) ? (MaxDim * 1.0) / b : 1.0;
h = (int)(h * per);
w = (int)(w * per);
// membuat thumbnail image
using (Image img2 = img.GetThumbnailImage(w, h,
ew Image.GetThumbnailImageAbort(Abort), IntPtr.Zero))
{
// men-save hasilnya menggunakan response stream
img2.Save(ctx.Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
public bool IsReusable { get { return true; } }
private bool Abort() { return false; }}

Thursday, May 19, 2005

Enkripsi... enkripsi...

Ternyata ASP.NET telah menyediakan .NET FCL (Framework Class Library) untuk masalah enkripsi data. Jadi kita (programmer) tidak harus bersusah-susah untuk membuatnya sendiri, dan untuk yang merasa bahwa pembuatan sekuriti bukanlah hal yang sulit, maka dengan adanya FCL ini kita lebih dimudahkan, karena pembuat FCL ini adalah orang-orang terlatih dalam bidang ini, jadi mari kita serahkan saja pada mereka, dan kita tinggal menggunakannya \(^^)/

Disediakan 4 macam cipher oleh .NET FCL, yaitu DES, RC2, Rijndael and TripleDES.
Ini contoh sederhana, penggunaan Rijndael.

class CipherWrapper
{
RijndaelManaged _cipher = null;
public CipherWrapper()
{
_cipher = InitCipher();
}
public CipherWrapper(byte[] key)
{
_cipher = InitCipher(key);
}
public byte[] Key
{
get { return _cipher.Key; }
set { _cipher.Key = value; }
}
public byte[] EncryptMessage(byte[] plainText, out byte[] iv)
{
_cipher.GenerateIV();
iv = _cipher.IV;
ICryptoTransform transform = _cipher.CreateEncryptor();
byte[] cipherText = transform.TransformFinalBlock(plainText, 0, plainText.Length);
return cipherText;
}
public byte[] DecryptMessage(byte[] cipherText, byte[] iv)
{
_cipher.IV = iv;
ICryptoTransform transform = _cipher.CreateDecryptor();
byte[] plainText = transform.TransformFinalBlock(cipherText, 0, cipherText.Length);
return plainText;
}
private RijndaelManaged InitCipher()
{
RijndaelManaged cipher = CreateCipher();
cipher.GenerateKey();
return cipher;
}

private RijndaelManaged InitCipher(byte[] key)
{
RijndaelManaged cipher = CreateCipher();
cipher.Key = key;
return cipher;
}
private RijndaelManaged CreateCipher()
{
RijndaelManaged cipher = new RijndaelManaged();
cipher.KeySize = 256;
cipher.BlockSize = 256;
cipher.Mode = CipherMode.CBC;
cipher.Padding = PaddingMode.PKCS7;
return cipher;
}
}

Sayang sekali saya pribadi bukanlah orang yang langsung mengerti hanya dengan membaca artikel ini, tetapi mungkin rekan-rekan sekalian bisa lebih mengerti
http://www.developerfusion.com/show/4647/1/

----------------------
|Yohan W. (201114282)|
----------------------

Wednesday, April 13, 2005

[OOT] Advice for Computer Science College Students

Ada artikel yang sangat menarik, judulnya Advice for Computer Science College Students yang ditulis oleh Joel Spolsky. Joel ini adalah seorang developer senior yang termasuk pembicara top bidang software engineering di Amerika. Dia dulu pernah jadi programmer Microsoft, tapi sekarang sudah punya perusahaan sendiri.

Nah, artikel ini khusus berisi nasihat-nasihat dia untuk mahasiswa bidang komputer ! Sangat berguna dan sangat dianjurkan untuk dibaca. Artikelnya bisa dilihat di sini.

Bugs pada tombol submit ASP.Net

Tombol Submit pada ASP.NET tidak berfungsi pada pengguna IIS setelah menginstal .NET Framework 1.1 Service Pack 1
Hal ini disebabkan karena file2 script client-side yg terletak di web site tidak disinkron dengan .NET Framework 1.1 sehingga event PostBack pada validasi client-side terhenti. Solusinya adalah dengan menginstall file2 script client-side ke setiap subfolder Aspnet_client dari semua folder site Microsoft IIS (klik run pada start kemudian ketik C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322.aspnet_regiis.exe -c dan klik OK), tetapi jika user menggunakan source control perintah "aspnet_regiis.exe -c" kemungkinan tidak berguna karen file2 script dianggap read only. Jika hal ini terjadi hapuslah folder Aspnet_client dari source control.

by Ariston - 201114136

Tuesday, April 12, 2005

String builder (Append) Vs Concatenation(+) dalam operasi string

ternyata penggunaan String builder(append) dalam operasi penggabungan string jauh

lebih efektif
dibandingkan dengan menggunakan Concatenation(+)
penggunaan append(string builder) hampir 200 kali lebih cepat daripada concat
hal ini disebabkan karena String dalam .Net bersifat immutable
artinya sesungguhnya operasi pada string sesungguhnya mengembalikan nilai copy dari

string yang sudah dimodifikasi
jadi dalam semua operasi string akan dibuat copy string itu terlebih dahulu

sebagai contoh penggunaan String builder(append) dan Concatenation(+)
dalam penggabungan 10,000 substrings

string strSub;
int intLimit = 10000;
for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
strWhole = strWhole + " " + strSub;
}//waktu yg dibutuhkan 1.9528080 detik

for (int i=0; i < intLimit; i++)
{
strSub = i.ToString();
sb.Append(" ");
sb.Append(strSub);
}//waktu yg dibutuhkan 0.0100144 detik

Source:
http://www.ondotnet.com/pub/a/dotnet/2002/04/22/asptips.html

Friday, March 25, 2005

Resource Access Identities

Proses account pada ASP.Net dapat digunakan untuk mengakses sumber remote network seperti SQL server yang memerlukan windows authentication, dengan membuat local account yang dicerminkan pada server database.
more info : http://msd2d.com/Content/Tip_viewitem_03.aspx