June 2008 - Posts

Q:
Bagaimana meng-list InstallFont di system kita dengan mudah?

A:
Tentu saja mudah, dengan class InstalledFontCollection, jadi indah dech hari-nya.
Contoh di bawah adalah men-list Install Font ke dalam Label dalam Panel pada winforms.

	// namespace: System.Drawing.Text
	// Wrapper dari List Install Font
	InstalledFontCollection FontFamilies = new InstalledFontCollection();
	// Iterate font ke label
	//pnlFonts merupakan Panel Control
	int offset = 10;
	foreach (FontFamily family in FontFamilies.Families)
	{
		try
		{
			Label fontLabel = new Label();
			fontLabel.Text = family.Name;
			fontLabel.Font = new Font(family, 14);
			fontLabel.Left = 10;
			fontLabel.Width = this.pnlFonts.Width;
			fontLabel.Top = offset;

			// Panel-nya di buat Scroallable
			this.pnlFonts.Controls.Add(fontLabel);
			offset += 30;
		}
		catch { } //Kadang tidak semua font support normal style
	}
	' namespace: System.Drawing.Text
	' Wrapper dari List Install Font
	Dim FontFamilies As InstalledFontCollection = New InstalledFontCollection()
	' pnlFonts merupakan Panel Control
	Dim offset As Integer = 10
	For Each family As FontFamily In FontFamilies.Families
		Try
			Dim fontLabel As Label = New Label()
			fontLabel.Text = family.Name
			fontLabel.Font = New Font(family, 14)
			fontLabel.Left = 10
			fontLabel.Width = pnlFonts.Width
			fontLabel.Top = offset

			' Panel-nya di buat Scroallable
			pnlFonts.Controls.Add(fontLabel)
			offset += 30
		Catch
			' Kadang tidak semua font support normal style
		End Try
	Next
Share this post: | | | |

Q:
Bagaimana men-load font yang kita bundle/belum ter-install?

A:
Dalam namespace System.Drawing.Text, kita memiliki class PrivateFontCollection.
Class ini akan membantu .Net Runtime mengenali binary format font agar dapat di convert menjadi class Font.
Dengan cara ini kita tidak memerlukan admin level untuk menggunakan font local/private kita ini.
Karena untuk meng-install font kita memerlukan admin level, terutama bila kita berhubungan dengan ASP.Net.

    // namespace: System.Drawing.Text
	Font fn;
	using (PrivateFontCollection pfc = new PrivateFontCollection())
	{
		pfc.AddFontFile(@"YouLocalFont.TTF");
		fn = new Font(pfc.Families[0], 18);
	}
    ' namespace: System.Drawing.Text
	Dim fn As Font
	Using pfc As PrivateFontCollection = New PrivateFontCollection()
		pfc.AddFontFile("YouLocalFont.TTF")
		fn = New Font(pfc.Families(0), 18)
	End Using
Share this post: | | | |

Kalau mengalami property blank di visual studio 2008, maka coba lakukan seperti ini.

  • 1. start -> Programs -> Microsoft Visual Studio 2008 -> Visual Studio Tools -> Visual Studio 2008 Command Prompt
  • 2. ketik: devenv /setup
  • 3. Restart Visual Studio
Yang terjadi dengan command itu adalah ia akan mengabungkan resource metadata dari menu, toolbars dan command yang ada di VSPackages.

Share this post: | | | |
The 2007 Microsoft Office system already provides support for 20 different document formats within Microsoft Office Word, Office Excel and Office PowerPoint. With the release of Microsoft Office 2007 Service Pack 2 (SP2) scheduled for the first half of 2009, the list will grow to include support for XML Paper Specification (XPS), Portable Document Format (PDF) 1.5, PDF/A and Open Document Format (ODF) v1.1. When using SP2, customers will be able to open, edit and save documents using ODF and save documents into the XPS and PDF fixed formats from directly within the application without having to install any other code. It will also allow customers to set ODF as the default file format for Office 2007. To also provide ODF support for users of earlier versions of Microsoft Office (Office XP and Office 2003), Microsoft will continue to collaborate with the open source community in the ongoing development of the Open XML-ODF translator project on SourceForge.net.

Cuplikan di atas bisa di lihat (Microsoft Expands List of Formats Supported in Microsoft Office).
Jadi di service pack 2 Office, kita tidak memerlukan Add-in untuk meng-save-as ke PDF atau XPS lagi. Sudah bundle, mungkin mereka sudah 'damai' ya dengan adobe soal PDF. :)

Share this post: | | | |
Office Ergonomic

Kalau di pikir sich memang masuk akal, hanya kadang kita tidak bisa sesempurna itu dech. :)

Di Nismat mereka memfokuskan fisik terapi, dan mereka menyarankan Office Ergonomic seperti itu.
Walaupun kebanyakan dari pengguna komputer tidak akan duduk seperti itu kecuali ada fasilitas-nya.
Seperti yang pernah lihat di world bank office, mereka memiliki bangku dengan unik design dan memaksa tubuh kita pada posisi ergonimis tampa kita menyadari-nya dan tentu saja cukup nyaman.
Lucunya bentuknya dan cara dulunya agak berbeda.

Share this post: | | | |

Menarik belakangan ini kita melihat banyak web-shell yang muncul
Ide-nya bukan baru, hanya memang sekarang AJAX memberikan kemungkinan lebih besar.
Seperti belajar ruby di web. Mencoba berinterksi dengan ruby console di web.
Nah, Goosh ini mungkin langkah maju dalam Web-OS and ia menggunakan ExtJs sebagai base-nya. Menyenangkan melihat web-shell ini, bisa by pass blok website :P .
Coba lihat goosh ini seperti apa:

Goosh goosh.org 0.5.0-beta #1 Mon, 23 Jun 08 12:32:53 UTC Google/Ajax

Welcome to goosh.org - the unofficial google shell.

This google-interface behaves similar to a unix-shell.
You type commands and the results are shown on this page.

goosh is powered by google.

goosh is written by Stefan Grothkopp 
it is NOT an official google product!

Enter help or h for a list of commands.

Loading local settings...

guest@goosh.org:/web> help
help

command		aliases	parameters	function
web			(search,s,w) [keywords]	google web search
news		(n)	[keywords]	google news search
more		(m)	get more results
blogs		(blog,b) [keywords]	google blog search
read		(rss,r)	 read feed of url
feeds		(feed,f)	[keywords]	google feed search
place		(places,map,p)	[address]	google maps search
translate	(trans,t)	[lang1] [lang2] 	google translation
images		(image,i)	[keywords]	google image search
video		(videos,v)	[keywords]	google video search
clear		(c)	clear the screen
wiki		(wikipedia)	[keywords]	wikipedia search
help		(man,h,?)	[command]	displays help text
cd				change mode
site		(in)	 	search in a specific website
open		(o)		open url in new window
go			(g)		open url
lucky		(l)	[keywords]	go directly to first result
ls			[command]	lists commands
addengine	add goosh to firefox search box
load			load an extension
settings	(set)	[name] [value]	edit settings
gmail		(mail)	[compose]	read & write mail in gmail *
login		login with your google account *
logout		log out of goosh *

- Enter green commands without parameters to change default mode.
- Anything that's not a command will search in current default mode.
- Aliases will expand to commands. Numbers will expand to corresponding search results.
- Use cursor up and down for command history.
- Enter keyword and hit the tab-key for tab-completion.
- Commands marked with * are experimental, use them with care and please report any bugs.

guest@goosh.org:/web>
Share this post: | | | |

Q: Bagaimana meng-convert DateTime '6/28/2008 12:15:05 AM' (en-us format) atau '28/06/2008 0:15:05' (id-ID format) menjadi '28/06/2008 0:15:05 WIB'?

A: Banyak yang salah sangka bahwa 'AM/PM' bisa di ganti dengan 'WIB'.

Untuk Culture (en) mereka memang menggunakan 'AM/PM' sebagai penanda 12 jam.
Sedangkan di indonesia kita tidak menggunakan format itu. Kita menggunakan format 24 jam.
Coba kita lihat code di bawah:

    DateTime.Now.ToString(new CultureInfo("id-ID", true))
	hasil: '28/06/2008 0:15:05'
    DateTime.Now.ToString(new CultureInfo("en-US", true))
	hasil: '6/28/2008 12:15:05 AM'
Cukup dengan mengganti CultureInfo saja kita bisa meng-convert-nya menjadi beda format.
Dan format-nya mengikuti dari format di negara bersangkutan.

Untuk membuat-nya permanent/per-application, maka kita bisa mengganti pada Thread aplikasi.
	//memerlukan namespace: System.Threading
	Thread.CurrentThread.CurrentCulture = new CultureInfo("id-ID");
Lalu bagaimana dengan 'WIB'/Waktu Indonesia Barat-nya?
WIB,WITA,WIT,EST dan lainnya tidak berhubungan langsung dengan class DateTime.
Karena ini merupakan TimeZone yang kita set dikomputer sesuai negara yang berada.

CultureInfo merupakan set of format yang di pakai negara bersangkutan. Yang di maksud format adalah currency, datetime, number dan sebagainya.
Sedangkan TimeZone merupakan Standard yang sudah di sepakati dan bukan merupakan format.

Jadi untuk menampilkan '28/06/2008 0:15:05 WIB' ini maka yang kita perlu meng-convert menjadi format tanggal indonesia (id-ID) dan di tambahkan TimeZone untuk di tampilkan 'WIB'-nya.

TimeZone akan berguna bila kita akan berhubungan dengan Area Waktu/TimeZone di mana negara itu berada.
Seperti kita ingin tahu jam berapa di new york? maka kita melihat TimeZone-nya kemudian membandingkan dengan TimeZone kita berada. Kita memajukan-memundurkan Waktu berdasarkan Zone di mana negara tersebut berada.

Memang pada BCL di bawah 3.5, kita cuma memiliki class TimeZone.
Class ini hanya memiliki sedikit fungsi untuk membantu kita meng-convert DateTime dari satu Zone ke Zone lainnya, kebanyakkan kita menulis sendiri(baca: code) untuk itu.
Sedang di .Net 3.5 kita akan mendapatkan TimeZoneInfo class yang tadinya namanya TimeZone2 (pada saat beta/pre-realese-nya) dan ia berada di assembly System.Core.dll .
	TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).ToString()
	hasil: '07:00:00'
	TimeZoneInfo.Local.ToString()
	hasil: '(GMT +07:00)Bangkok, Hanoi, Jakarta'
	TimeZoneInfo.Local.BaseUtcOffset.ToString()
	hasil: '07:00:00'

Share this post: | | | |

Q: Bagaimana cara yang paling di sarankan untuk menyimpan data tipe DateTime ke database?
Karena cara penyimpanan data di Postgresql, MySql, Oracle, Ms SQL atau database lainnya kebanyakan berbeda.
Dan itu menimbulkan masalah bisa terjadi kesalahan formatnya baik ketika meng-input atau meng-retrieve-nya.

A: Sebaiknya bila kita berhubungan dengan database, kita di sarankan untuk mengikuti Format dari Tipe Data Database tersebut.
Kebanyakkan provider ADO.Net memiliki Tipe Data yang Sendiri. Seperti Tipe DateTime di MySQL (MySql.Data.Types.MySqlDateTime) atau Oracle (System.Data.OracleClient.OracleDateTime).
Oleh karena itu bila kita ber-interkasi (baik SQL Query atau StoreProcedure) dengan ADO.Net, maka kita akan menggunakan Parameter di object Command.
Dengan begitu kita tidak perlu membuat string parser atau converter untuk menyesuaikan DateTime antara .Net dan Database.
Contoh-nya seperti di bawah:

    //Dapat di terapkan baik C# atau VB.Net 
	//SQL = "SELECT * FROM theTable WHERE coloumDateTime = $YourDateTimeParamenter;";
	//cmd adalah MySqlCommand object
	cmd.Parameters.AddWithValue("$YourDateTimeParamenter", new MySqlDateTime(DateTime.Now));
	cmd.EndExecuteNonQuery();

Share this post: | | | |

Satu lagi web MVC framework yang dapat berjalan di atas .Net Runtime.
Team dari IronRuby sudah men-demo-kan Ruby-on-Rails(RoR) yang berjalan dengan IronRuby + .Net pada RailsConf.
IronRuby sendiri merupakan implemantasi dari Ruby Language yang di mulai oleh John Lam pada Febuari 2007.
Pertama implementasi dari Ruby ini hanya berjalan semi-dynamic, karena membutuhkan sedikit trik compiler.
Dan untuk membuat-nya full dynamic maka team ini juga berkerjasama dengan team IronPyhton(implementasi dari Pyhton) membuat Dynamic Language Runtime(DLR).
Dengan DLR ini dan penyempurnaan implementasi Ruby pada IronRuby maka RoR dapat berjalan seperti normal dengan tambahan kombinasi ini dapat meng-akes Base Class Library(BCL) .Net . :)

Oh ya, kombinasi DLR + IronPython dapat menjalankan Django (salah satu MVC framework di Pyhton).

Share this post: | | | |

Ini merupakan iklan dari retailer di korea yang memaketkan office untuk gereja. Lucu dan seru cara meng-ad-kannya :D

Share this post: | | | |