Halaman

Kamis, 25 Agustus 2011

Delphi : Variable Parameters, Packed Records

Variable Parameters
taken from www.chami.com
//
// FunctionWithVarArgs()
//
// skeleton for a function that
// can accept vairable number of
// multi-type variables
//
// here are some examples on how
// to call this function:
//
// FunctionWithVarArgs(
//   [ 1, True, 3, '5', '0' ] );
//
// FunctionWithVarArgs(
//   [ 'one', 5 ] );
//
// FunctionWithVarArgs( [] );
//
procedure FunctionWithVarArgs(
  const ArgsList : array of const );
var
  ArgsListTyped :
    array[0..$FFF0 div SizeOf(TVarRec)]
      of TVarRec absolute ArgsList;
  n         : integer;
begin
  for n := Low( ArgsList ) to
           High( ArgsList ) do
  begin
    with ArgsListTyped[ n ] do
    begin
      case VType of
        vtInteger   : begin
          {handle VInteger here}      end;
        vtBoolean   : begin
          {handle VBoolean here}      end;
        vtChar      : begin
          {handle VChar here}         end;
        vtExtended  : begin
          {handle VExtended here}     end;
        vtString    : begin
          {handle VString here}       end;
        vtPointer   : begin
          {handle VPointer here}      end;
        vtPChar     : begin
          {handle VPChar here}        end;
        vtObject    : begin
          {handle VObject here}       end;
        vtClass     : begin
          {handle VClass here}        end;
        vtWideChar  : begin
          {handle VWideChar here}     end;
        vtPWideChar : begin
          {handle VPWideChar here}    end;
        vtAnsiString: begin
          {handle VAnsiString here}   end;
        vtCurrency  : begin
          {handle VCurrency here}     end;
        vtVariant   : begin
          {handle VVariant here}      end;
        else          begin
          {handle unknown type here} end;
      end;
    end;
  end;
end;
Packed Records
Packed records is a way to align Delphi records. Delphi variables usually aligned at 2, 4, or 8 byte to optimize access, to make things clear, take a look at following code (taken from delphibasic.co.uk)
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = Packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;
there is more advanced usage for the record type of delphi, such as this one :
type 
   TRect = packed record
     case Integer of
       0: (Left, Top, Right, Bottom: Integer);
       1: (TopLeft, BottomRight: TPoint);
   end; 
TRect.TopLeft will map to the TRect.Left and TRect.Top, TRect.BottomRight will map to the TRect.Right and TRect.Bottom, anoher usage would be like this one :
type
   // Declare a fruit record using case to choose the
   // diameter of a round fruit, or length and height ohterwise.
   TFruit = Record
     name : string[20];
     Case isRound : Boolean of // Choose how to map the next section
       True  :
         (diameter : Single);  // Maps to same storage as length
       False :
         (length   : Single;   // Maps to same storage as diameter
          width    : Single);
   end;
when isRound is true, you could define 1 more variable, and that is the diameter:Single, and if isRound is false, you could define 2 more variable, that is length, and width

Sabtu, 20 Agustus 2011

Ubuntu : Adding new harddisk

First we need to list our hardware, is it detected yet by ubuntu? by using this command :
sudo lshw -C disk


make note of where your disk is, for example /dev/sdb


if you have gparted, then you got your self a rich partition manager, just go and choose your hardware (/dev/sdb in my example) and then new and then partition that disk

if you are using command line then there is the fdisk command

now to mount the device, simply create a new folder on your /media folder for the mount point example :
sudo mkdir /media/my_new_hd


and then to actualy mount it to the system :
sudo mount /dev/sdb /media/my_new_hd

now browse and get wild with nautilus

ah yes, to automatically mount the new HD, add the new hd to your your /etc/fstab file to something similar like this one liner :
/dev/sdb1 /media/mynewdrive ext3 defaults 0 2


**to launch editor, use sudo gedit /etc/fstab


I think i'm in love with ubuntu.. :D
unfortunately delphi is not there..
the games is not there..
but there is always lazarus ;)

ah yes, i currently running ubuntu 8.04, old i know, but that the only CD i had :D it's adequate for me to play aground with this powerful opensource OS

Have Fun everyone!

Solving Problem : using putty, connecting to Amazon EC2

There is a trick if your pem file converted to ppk (putty's private key) and the server respond is :
Server do not accept our key or something similar like that, server send public key etc..

On one blog i find that we need to open the pem file on a notepad and then add one line to the last line, so make sure you get your cursor under those texts..

One line is enough ;)

Now get to putty again, (i'm using ubuntu) so when the putty ask :"Login As" i answered Ubuntu and voila.. we get our self a great powerful cloud server

Kamis, 18 Agustus 2011

Playing with ubuntu

Playing with ubuntu fresh install, my target is to install indefero, mercurial to a vps, so i practice it using a virtual box.
the following is the commands for editing creating renaming file directory install etc, including installing the lamp and the pluf :)

  1. To rename dir or rename file using ubuntu comand line : mv
  2. To download file wget http://...
  3. To become a super user : sudo bash...
  4. To launch explorer along as super user : gksudo nautilus
  5. To restart apache : sudo /etc/init.d/apache2 restart
  6. To install sudo apt-get install package
  7. To upgrade apt : sudo apt-get upgrade
Ah yes, there are many more to explore!

Selasa, 16 Agustus 2011

Delphi : Dynamic object creation, Class Reference

A quick note for those delphi developer needs to use the dynamic object creation :
using the class reference is the good way to do it :)

a simple example :
procedure TForm1.Button1Click(Sender: TObject);
type
  CRForm = class of TForm;
var
  a: array[0..2] of CRForm;
  c: TForm;
begin
  a[0] := TForm2;
  a[1] := TForm3;
  a[2] := TForm4;

  c := TForm(a[2].Create(self));

  c.ShowModal;

  c.Free;
end;           
welcome to the power! :)
hope you could utilize this technique on your next application development adventure!

Rabu, 10 Agustus 2011

Solving : Windows Update Standalone Installer 0x80070422 The service cannot be started, either because it is disabled or because it has no enabled devices associated with it

If you stumbled that one,
you have accidentally disabled Windows Update Service, to enable the service again go to your Administrative Tools, and enables the Windows Update Service

Here is the step :
  1. Click on Windows Icon / Start Menu
  2. Administrative Tools
  3. Services
  4. Search for "Windows Update", double click on it, and then enable this service
hope this help! :)

Selasa, 09 Agustus 2011

Delphi XE : Out of memory

A great solution found by Giedrius Bauza
HKEY_CURRENT_USER – SOFTWARE – MICROSOFT – WINDOWS – INTERNET SETTINGS – ZONES
if you find Letter not Numbers, delete the Letter one.

Cheers! :)

Thank you mr. Bauza.

Rabu, 03 Agustus 2011

Delphi : Samples

Leverage your delphi skills by utilizing samples, read it, earn it, and sleep with it :D
http://www.torry.net/pages.php?id=352

regards everybody

Kamis, 28 Juli 2011

Delphi : Static variable

Static variable on a class :
type
  TMyClass = class(TObject)
  public
    class var X: Integer;
  end;

Selasa, 26 Juli 2011

Delphi : Invalid Pointer Operation

owhh my!! what a...
what is this invalid pointer operation, where could i trace the source of the bug??

:D

Do not mend my friend for there is a will there is a way..

first you will need this wonderful project :
http://sourceforge.net/projects/fastmm/
  1. Do not forget to set the "FASTMM4Options.inc" on your directory of units and looks for the line that says FullDebugMode
  2. Go to your project options : set linker map to "Detailed"
  3. Include the "FastMM_FullDebugMode.dll" to where your binary is executed
now.. when there is memory leaks detected, you will get a full detailed causes and stacks trace

Woow....
just Wow.. 
:)

Productivity : Using bookmark on CodeGear

You can mark a location in your code with a bookmark and jump directly to it from anywhere in the file. You can set up to ten bookmarks. Bookmarks are preserved when you save the file and available when you reopen the file in the Code Editor.

  1. To set a bookmark
    In the Code Editor, right-click the line of code where you want to set a bookmark. The Code Editor context menu is displayed.
    Choose Toggle BookmarksBookmark n, where n is a number from 0 to 9. A bookmark icon  is displayed in the left gutter of the Code Editor.
    Tip: To set a bookmark using the shortcut keys, press CTRL+SHIFT and a number from 0 to 9.

  2. To jump to a bookmark
    In the Code Editor, right-click to display the context menu.
    Choose GoTo BookmarksBookmark n, where n is a number from 0 to 9.
    Tip: To jump to a bookmark using the shortcut keys, press CTRL and the number of the bookmark. For example, CTRL+1 will jump you to the line of code set at bookmark 1.

  3. To remove a bookmark
    In the Code Editor, right-click to display the context menu.
    Choose Toggle BookmarksBookmark n, where n is the number of the bookmark you want to remove. The bookmark icon is removed from the left gutter of theCode Editor.
Tip: To remove all bookmarks from a file, choose Clear Bookmarks


Reference : Embarcadero

Senin, 25 Juli 2011

I am Blessed!

Have you look at your mother eyes lately?
Have you hold Her hand and say thank you deep from your hearth?

How's your Father, the one who protects you from everything? putting roof on your head? giving beds to your sleep, giving good dreams everyday?

Your Parents are your heaven, remember that always! though some times it could be hard to understand them, it's actually harder for them to understand yours, but they always tried to understand yours, have you tried to understand theirs? :D

My mother approach me today and said she had the money to help me buy the house, i have 21 mil in my hand, and she said she could help me with another 40 mil, i know that she don't have that much of money, i'm really confused why she told me that.. maybe someday i will understand what's the meaning of her words..

My mother always told me not to give up on everything, not to scare on anything except the Lord ;)
she is not only told me, but she is showing it to me each and every day

she told me to believe the good Lord with every breath, expects everything good in the future

She is the most optimistic person i ever met :) Thank you mom.. thank you dad, thank you big sister

a taste of heaven on earth.. thank you Lord

So.. i will not give up! never!

My mother is my role model my father is my guardian and my sister is my guidance and so my friends, what more could i ask for?

Thank you Lord, i'm very grateful

Minggu, 24 Juli 2011

Delphi : How to rotate bits?

Rotating bits using delphi is not directly supported
here is a function i found searching the internet to rotate the bits :
function JHROR32(Value : dword ; N : integer) : dword ;
begin
  Result := (Value shr N) + (Value shl (32-N));
end;

function JHROL32(Value : dword ; N : integer) : dword ;
begin
  Result := (Value shl N) + (Value shr (32-N));
end;
Hope you find it usefully! ;)

Source : http://www.merlyn.demon.co.uk/del-bits.htm

C++ and Delphi bitwise operator

Converting Eh?
Operator name Syntax in C
Bitwise NOT ~a Yes
Bitwise AND a & b Yes
Bitwise OR a | b Yes
Bitwise XOR a ^ b Yes
Bitwise left shift a << b Yes
Bitwise right shift a >> b Yes
Hmm.. not a pretty sight :D
but there it is :
note : delphi shifting : "shl" and "shr"

Delphi Variable sizes

Although we are on a high programming language, the size of variables is very important when you are working with untyped / binary files and also socket programming, here is the basic types and also their sizes
Type  Storage size                        Range            
 
 Byte       1                             0 to 255
 ShortInt   1                          -127 to 127
 Word       2                             0 to 65,535
 SmallInt   2                       -32,768 to 32,767
 LongWord   4                             0 to 4,294,967,295
 Cardinal   4*                            0 to 4,294,967,295
 LongInt    4                -2,147,483,648 to 2,147,483,647
 Integer    4*               -2,147,483,648 to 2,147,483,647
 Int64      8    -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
 
 Single     4     7  significant digits, exponent   -38 to +38
 Currency   8    50+ significant digits, fixed 4 decimal places
 Double     8    15  significant digits, exponent  -308 to +308
 Extended  10    19  significant digits, exponent -4932 to +4932
 
 * Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed.
This table is pasted from the original source at http://www.delphibasics.co.uk/Article.asp?Name=Numbers a great website for leaning delphi language

Have a good and nice day everyone.

I'm trying to leaving my traces for anyone who would venture the world of programming

hehehehe :D

Source Code

Looking for a fast way to accomplish your programming task?

search here! :)
http://koders.com/info.aspx?page=LanguageReport&la=delphi

a very great source code resource for your repetitive job
do not, re-invent the wheel  dear friend..

Jumat, 22 Juli 2011

C++ Xml Processing

Looking for components to utilize the power of xml to your applicaitons?

here is the two major xml library that i find to be simple and portable (linux, windows, mac)
http://xerces.apache.org/xerces-c/
http://www.grinninglizard.com/tinyxml/

Free Fonts Resource

Cool fonts for your project :
FontSquirel absolutely free for commercial
Dafont - some free for commercial,some are not..
fonts4free.net - some free for commercial some are not

Selasa, 19 Juli 2011