Friday, December 19, 2008

Introduction to WAP

What is WAP?

The wireless industry came up with the idea of WAP. The point of this standard was to show internet contents on wireless clients, like mobile phones.

* WAP stands for Wireless Application Protocol
* WAP is an application communication protocol
* WAP is used to access services and information
* WAP is inherited from Internet standards
* WAP is for handheld devices such as mobile phones
* WAP is a protocol designed for micro browsers
* WAP enables the creating of web applications for mobile devices.
* WAP uses the mark-up language WML (not HTML)
* WML is defined as an XML 1.0 application
The Wireless Application Protocol

The WAP protocol is the leading standard for information services on wireless terminals like digital mobile phones.

The WAP standard is based on Internet standards (HTML, XML and TCP/IP). It consists of a WML language specification, a WMLScript specification, and a Wireless Telephony Application Interface (WTAI) specification.

WAP is published by the WAP Forum, founded in 1997 by Ericsson, Motorola, Nokia, and Unwired Planet. Forum members now represent over 90% of the global handset market, as well as leading infrastructure providers, software developers and other organizations. You can read more about the WAP forum at our WAP Forum page.
WAP Micro Browsers

To fit into a small wireless terminal, WAP uses a Micro Browser.

A Micro Browser is a small piece of software that makes minimal demands on hardware, memory and CPU. It can display information written in a restricted mark-up language called WML.

The Micro Browser can also interpret a reduced version of JavaScript called WMLScript.
What is WML?

WML stands for Wireless Markup Language. It is a mark-up language inherited from HTML, but WML is based on XML, so it is much stricter than HTML.

WML is used to create pages that can be displayed in a WAP browser. Pages in WML are called DECKS. Decks are constructed as a set of CARDS.
What is WMLScript?

WML uses WMLScript to run simple code on the client. WMLScript is a light JavaScript language. However, WML scripts are not embedded in the WML pages. WML pages only contains references to script URLs. WML scripts need to be compiled into byte code on a server before they can run in a WAP browser.

Visit our WMLScript tutorial to learn more about scripting in WML documents.
Examples of WAP use

* Checking train table information
* Ticket purchase
* Flight check in
* Viewing traffic information
* Checking weather conditions
* Looking up stock values
* Looking up phone numbers
* Looking up addresses
* Looking up sport results

FAQ about WAP

These are frequently asked question about WAP:

* What is WAP?
* Who is WAP for?
* How does WAP relate to standardization bodies?
* How is WAP related to Internet standards?
* What is the status of WAP?
* What is the future of WAP?

We will try to answer most of these questions. In the meantime read the answers at: http://www.wapforum.org/faqs/index.htm.

Readmore »»

10 Tips for Wireless Home Network Security

By Bradley Mitchell, About.com
Many folks setting up wireless home networks rush through the job to get their Internet connectivity working as quickly as possible. That's totally understandable. It's also quite risky as numerous security problems can result. Today's Wi-Fi networking products don't always help the situation as configuring their security features can be time-consuming and non-intuitive. The recommendations below summarize the steps you should take to improve the security of your home wireless network.
1. Change Default Administrator Passwords (and Usernames)
At the core of most Wi-Fi home networks is an access point or router. To set up these pieces of equipment, manufacturers provide Web pages that allow owners to enter their network address and account information. These Web tools are protected with a login screen (username and password) so that only the rightful owner can do this. However, for any given piece of equipment, the logins provided are simple and very well-known to hackers on the Internet. Change these settings immediately.
More Info
2. Turn on (Compatible) WPA / WEP Encryption
All Wi-Fi equipment supports some form of encryption. Encryption technology scrambles messages sent over wireless networks so that they cannot be easily read by humans. Several encryption technologies exist for Wi-Fi today. Naturally you will want to pick the strongest form of encryption that works with your wireless network. However, the way these technologies work, all Wi-Fi devices on your network must share the identical encryption settings. Therefore you may need to find a "lowest common demoninator" setting.
More Info
3. Change the Default SSID
Access points and routers all use a network name called the SSID. Manufacturers normally ship their products with the same SSID set. For example, the SSID for Linksys devices is normally "linksys." True, knowing the SSID does not by itself allow your neighbors to break into your network, but it is a start. More importantly, when someone finds a default SSID, they see it is a poorly configured network and are much more likely to attack it. Change the default SSID immediately when configuring wireless security on your network.
More Info
4. Enable MAC Address Filtering
Each piece of Wi-Fi gear possesses a unique identifier called the physical address or MAC address. Access points and routers keep track of the MAC addresses of all devices that connect to them. Many such products offer the owner an option to key in the MAC addresses of their home equipment, that restricts the network to only allow connections from those devices. Do this, but also know that the feature is not so powerful as it may seem. Hackers and their software programs can fake MAC addresses easily.
More Info
5. Disable SSID Broadcast
In Wi-Fi networking, the wireless access point or router typically broadcasts the network name (SSID) over the air at regular intervals. This feature was designed for businesses and mobile hotspots where Wi-Fi clients may roam in and out of range. In the home, this roaming feature is unnecessary, and it increases the likelihood someone will try to log in to your home network. Fortunately, most Wi-Fi access points allow the SSID broadcast feature to be disabled by the network administrator.
More Info
6. Do Not Auto-Connect to Open Wi-Fi Networks
Connecting to an open Wi-Fi network such as a free wireless hotspot or your neighbor's router exposes your computer to security risks. Although not normally enabled, most computers have a setting available allowing these connections to happen automatically without notifying you (the user). This setting should not be enabled except in temporary situations.
More Info
7. Assign Static IP Addresses to Devices
Most home networkers gravitate toward using dynamic IP addresses. DHCP technology is indeed easy to set up. Unfortunately, this convenience also works to the advantage of network attackers, who can easily obtain valid IP addresses from your network's DHCP pool. Turn off DHCP on the router or access point, set a fixed IP address range instead, then configure each connected device to match. Use a private IP address range (like 10.0.0.x) to prevent computers from being directly reached from the Internet.
More Info
8. Enable Firewalls On Each Computer and the Router
Modern network routers contain built-in firewall capability, but the option also exists to disable them. Ensure that your router's firewall is turned on. For extra protection, consider installing and running personal firewall software on each computer connected to the router.
More Info
9. Position the Router or Access Point Safely
Wi-Fi signals normally reach to the exterior of a home. A small amount of signal leakage outdoors is not a problem, but the further this signal reaches, the easier it is for others to detect and exploit. Wi-Fi signals often reach through neighboring homes and into streets, for example. When installing a wireless home network, the position of the access point or router determines its reach. Try to position these devices near the center of the home rather than near windows to minimize leakage.
More Infojavascript:void(0)
10. Turn Off the Network During Extended Periods of Non-Use
The ultimate in wireless security measures, shutting down your network will most certainly prevent outside hackers from breaking in! While impractical to turn off and on the devices frequently, at least consider doing so during travel or extended periods offline. Computer disk drives have been known to suffer from power cycle wear-and-tear, but this is a secondary concern for broadband modems and routers.

If you own a wireless router but are only using it wired (Ethernet) connections, you can also sometimes turn off Wi-Fi on a broadband router without powering down the entire network.
Readmore »»

Autorun.inf structure and making

Introduction to Autorun.inf

When you insert a CD into the computer, Windows looks if AUTORUN.INF file is located in the root folder of a CD. If AUTORUN.INF is found, then Windows follows the instructions in this file to run a program. If you want your program, document, presentation or web page to be open, once a CD is inserted, then you need to create AUTORUN.INF file or just use our free 1st AutoRun Express utility.
Autorun.inf samples

We'll learn AUTORUN.INF structure in details later. Now take a look at the following sample AUTORUN.INF file:

[autorun]
open=Setup.exe
icon=Setup.exe,1

This sample AUTORUN.INF file tells Windows to run Setup.exe program located in the CD root folder. Also it specifies that Windows should use first icon from Setup.exe to display this CD in Explorer.
How to create Autorun.inf?

You may create and edit AUTORUN.INF file manually (using Windows Notepad) or you may use free 1st AutoRun Express utility to create your own autorun CDs with a few clicks!
Autorun.inf structure and commands

AUTORUN.INF is a text file that should contain an Autorun section. This section starts with a header:

[autorun]

and should be followed with commands. There are the following commands available:

icon=my.ico
icon=setup.exe,1

Icon command specifies an icon for the CD drive in My Computer. You may specify an icon file directly or an exe/dll file with icons inside and specify an index of the desired icon. Please note, that 1st AutoRun Express allows you to pick icons visually and copies icon automatically to the burning folder if you pick an icon outside the CD.

label=My Presentation

Label command specifies a text label that is displayed for this CD in Explorer

shell\readme\command=notepad README.TXT
shell\readme=Read &me
shell\software\command=Setup.exe
shell\software=Setup the software

Use a series of shell commands to specify one or more entries in the pop-up menu that appears when the user right-clicks on the CD icon. (The shell entries supplement the open command.)

This example shows how to add two entries to the menu (Read me - to display the README.TXT file in Notepad, and Setup the software - to start the software installation by running the "setup.exe" file.)

Any verb string (without spaces) can appear after "shell\"; "readme" and "software" were used above.

On one line, append "\command=" followed by the command you want to run. On the next line, append "=" and the text that appears in the menu. Put an ampersand character (&) before the character that should be used as the menu item short-cut key.

[DeviceInstall]

Windows XP also supports a [DeviceInstall] section in AUTORUN.INF with the DriverPath command specifying a base directory for driver file searches.

[autorun.mips]
[autorun.alpha]
[autorun.ppc]

AUTORUN.INF may have other sections for other NT/W2000 users, ie MIPS, DEC Alpha, and PowerPC.
Autorun.inf drawbacks

Major Autorun.inf drawback is that it only allows you to run programs, but not documents, HTML pages etc.

If you target Windows 2000/XP only, then you may overcome this limitation by using shellexecute command. Otherwise you can try to use the "start" command as in the following example:

[autorun]
open=start index.html

However, if you do this, Windows displays a DOS box briefly, and "start" command might not be available on some systems.

If you want to open documents, web pages etc. in any Windows version guaranteed and without flickering DOS box, then you may use free 1st AutoRun Express utility to create your own autorun CDs with a few clicks.
Why Autorun.inf does not work on my or user's computer?

Your CD users may have switched off autorun. This might be because they are concerned about viruses. Also, if they press the Shift key down while inserting the CD, AutoRun is disabled. In Windows NT4, 2000 and XP systems, only Administrators and Power Users can use AutoRun.

There is no way to force your users to use AutoRun. It is therefore good practice to provide instructions so that users know how to start your CD, eg tell them to open file index.htm in their browser. These instructions are also required if your CD might be viewed by non-Windows users.
How to disable Autorun.inf?

To test AutoRun you need to have it enabled on your computer. A registry setting can be used to disable AutoRun. Click Start|Run then type in regedit. Select Edit|Find and type in NoDriveTypeAutoRun. This value should be found in this key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer.

The NoDriveTypeAutoRun value should be hexadecimal 95 if AutoRun is enabled on all CDs, or B5 if disabled for CDs. (If you want to test AutoRun on a floppy disk, set this value to 91.) You may need to change more than one instance of NoDriveTypeAutoRun in the registry. You usually need to reboot for a new value to take effect.

In Windows 95/98/Me the NoDriveTypeAutoRun value is displayed as 95 00 00 00. In Windows NT4, 2000 and XP this value is displayed as 0x00000095 or hexadecimal 95. If you modify the NoDriveTypeAutoRun value make sure it is still in the correct format.

There are two other - uncommon - ways of disabling AutoRun. The NoDriveAutoRun registry value is in the same key as NoDriveTypeAutoRun. Each bit represents each drive, so hexadecimal 01 disables AutoRun for floppy drive A, 04 disables AutoRun for drive C, 10 disables AutoRun on E. Values can be combined, so 19 disables AutoRun on E, D and A.

If either NoDriveTypeAutoRun or NoDriveAutoRun specify that AutoRun should be disabled for a drive, then it is disabled for that drive.

Finally, programmers might like to know that AutoRun can also be disabled by the program that controls the foreground window by handling the "QueryCancelAutoPlay" Windows message. Please consult the Microsoft documentation for more details.
How to test Autorun.inf?

If you want to preview your autorun CD without actual burning, then you may try the SUBST command. This command allows you to create a virtual drive that is actually a folder on your physical drive.

Copy your autorun CD contents into the specific folder on your CD. Let's it be "C:\My CD". Then click Start|Run and enter:

subst O: "C:\My CD"

Where O: is an unused drive name. Click OK and after this command you will find a new drive O: in My Computer with the same contents as in C:\My CD folder. It should display an icon specified in AUTORUN.INF and when you double-click its icon it will autorun.

To remove substitution later please use the following command:

subst O: /d

Also, when you are using our free utility 1st AutoRun Express to create autorun cd, then you may test how autorun will run directly from inside the program.
Autorun.inf and mixed cds

Enhanced CDs contain both music audio and computer data, so they can be played on audio equipment and used on a computer. (Enhanced CDs are also known as CD Extra or CD Plus CDs.) Note that the Mixed-mode CDs also contain audio and data, but these may not be playable on audio equipment.

Note that not all Windows computers will recognise the data on an Enhanced CD, although the audio is always seen. (Windows Me, 2000 and XP usually seem to recognise Enhanced CD data, but it may be drive dependent.) Therefore, do not use this format if you want to be sure that your data is available.

If the Enhanced CD data does not have an AUTORUN.INF file, then Windows will usually start playing the CD when it is inserted. However, if an AUTORUN.INF is present, then Windows will follow the instructions in there rather than playing the CD.

The data on an Enhanced CD can only use short filenames or folder names. Long filenames will be truncated to an "8.3" form, eg "index.html" may appear as "INDEX~1.HTM".
Readmore »»

Enable/Disable Autorun

How To Enable/Disable Autorun (Windows 95/98/Me)

1. Access the System Properties Dialog. Using Control Panel: My Computer: Properties or Explorer: My Computer: Properties.

2. Select the Device Manager tab.

3. Select the CD-ROM folder.

4. Select the entry for your CD-ROM drive.

5. Select Properties.

6. Select the Settings tab.

7. Turn on or off the Auto insert notification option.

8. Select OK.

9. Select OK

How To Enable/Disable Autorun (Windows NT/2000)

1. Start RegEdit (regedt32.exe).

2. Go to HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Cdrom.

3. Edit the Autorun value to '1' to enable autorn, and '0' to disable autorun.

4. Close RegEdit

How To Enable/Disable Autorun (Windows XP)

1. Open Windows Explorer by pressing the Windows + "e" key.

2. Right-click the desired CD-ROM and select Properties from the menu.

3. Select the AutoPlay tab.

4. Select each item from the pulldown list and for the Action to perform, select "Take no action" to disable autorun, or pick the apporpriate action to take if enabling autorun.

5. Select OK.

How To Enable Autorun for Other Removable Media

Autorun can be enabled or disabled for all Removable media types, such as a floppy or Zip disk. Windows systems are configured to enable CD Notification, other removable media are by default disabled.

The System Properties User interface only exposes the CD Enable or Disable selection. The setting reflected in this dialog makes an entry in the System Registry. It is in this same location that other media types are configured.

Notes:

1. Modifiying the Registry is not for the inexperienced user. Anyone will tell you, be VERY careful.
2. The modifications made in this case use Hex not Decimal numbers. If you are unfamiliar with the Registry or the characteristics of base numbering and Hex, studying these topics prior to making these modifications is advisable.

To Modify these Registry Settings, Use Regedit and navigate to the following Key:

HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Explorer
"NoDriveTypeAutoRun"

The default value for the setting is 95 0 0 0. Change the first byte to 91. Restart the computer to make the new setting take effect. You may have to right-click on the floppy and choose AutoPlay from the menu to see the AutoPlay behavior.
Additional Technical Info

The first byte defines which drive types to EXCLUDE from Autorun behavior. The hex value of the byte is the sum of all of the drive type values to exclude + 128.

DRIVE_UNKNOWN 1
DRIVE_NO_ROOT_DIR 2
DRIVE_REMOVABLE 4 (floppy disks and removable cartridges)
DRIVE_FIXED 8 (hard disks)
DRIVE_REMOTE 16 (network drives)
DRIVE_CDROM 32 (CD-ROMs)
DRIVE_RAMDISK 64

The default configuration excludes UNKNOWN (1), REMOVABLE (4) and REMOTE (16) which would be 16 + 4 + 1 + 128 = 149, which is hex 95. If you take out REMOVABLE you get 16 + 1 + 128 = 145, which is hex 91.

The calculation for this value is 1 + 4 + 16 + 128 = 149. 149 Decimal is 95 Hex

The new calculation is 1 + 16 + 128 = 145. 149 Decimal is 91 Hex

You may have to restart for the system to recognize a floppy or Zip as an Autoplay drive. If your floppy drive does not show a custom icon or AutoPlay in the menu when right-clicked, double-click on the icon for your computer on the desktop and press F5 to refresh the information in the Explorer window. Zips and floppies will not autolaunch when media is inserted. You must double-click their icon or right-click and choose AutoPlay from the menu.
Readmore »»

Monday, December 15, 2008

IE8 Is Great But I Uninstalled It

George P. Alexander Jr. (Software Engineer) posted 10/28/2008 | Comments (2)
So after a not-so-happy time with IE 8 Beta, I've uninstalled it and have IE7 back on my desktop. Two simple reasons why I use Internet Explorer is because 1. most corporate websites and web applications render right only under IE and 2. Web applications I develop for some of these corporations have a requirement that they should work right in IE first and any other browser is secondary.

A vicious cycle I guess.

I do think that IE8 is pretty neat and I did like it a lot. One new feature is a "web slice" and I didn't find it very amusing. When it comes to speed, I'm pretty happy with Firefox and Chrome. From a developer's perspective however, there certainly were a few things to note that would make you think twice before wanting to uninstall.
The built-in IE8 debugger tools for HTML, Javascript and CSS is pretty neat. You just can't miss the profiler for scrolling through functions easily, inferring script performance by knowing the total number of calls to a function, time spent on it, tools for graph reporting and data exporting etc. Before you had to down the IE developer toolbar to get some cool developer support but now you get all that built-in so you kind'a get that Firefox developer feel when using it (Remember when developers always loved Firefox over Internet Explorer?). It is also more error friendly than previous IE versions when reporting errors from external script files. Before, when script debugging was disabled and you enabled errors to be notified, the source of the error was usually a pain to find out since it was in most cases, always not right. Hence, you had to enable script debugging and this would cascade to all your browser sessions. Any open browser session that had regular or irregular auto-refreshes or an Ajax call (like Google homepage) with a script error would instantly pop-up with a debug prompt. This is really irritating if you've been through it a couple of times. But now this seems to be fixed with IE8. So no need to enable debugging anymore to pinpoint the source of error. Besides, I hated script debugger or having an external applications to debug my web applications as loading these external applications took an extra load of time and since debugging is something you do so frequently, it just sucks have to go through the same routine frequently.

IE8 is also CSS 2.1 and standards compliant while CSS extensions that were added from IE5 onwards have been fully depreciated to protect against browser based attacks. So no more "IE is so insecure" at least on that basis.

One small development enhancement to the XMLHttpRequest object was the inclusion of a timeout property so as to handle requests that needed to get canceled if they were unresponsive. Major add-ons were APIs for cross domain security that enable you to use toStaticHTML and toJSON for sanitizing. JSON support is now native.

These are just some of the reasons why a developer would like IE8 especially if you're a .Net developer who has to develop for IE. But what mainly caused me to uninstall the upgrade was the same old problem - frequent crashes aka instability. After installing IE 8 Beta, I noticed that uncompressing zip files to any other location except the current folder would cause Windows Explorer to crash. On the same note, one IE 8 beta session crash closes all my IE browser windows (this is true for IE7 too though so I still can't figure out the root cause. But I think the chances of this happening in IE7 is much less). I hate that especially since I'm the kind'a guy who has at the least, a minimum of 10 browser windows open. Even though I use Firefox heavily more than Chrome and IE, I need IE open for the sake of few corporate websites and also for application development.

But all these crashes started getting a bit irritating after sometime so I eventually decided to uninstall the update to IE8. I thought the crashes were somehow related but after uninstalling, I still have my Windows Explorer crashing when uncompressing files to other locations. I don't know if the IE8 upgrade did something that messed Windows Explorer from uncompressing things right. There's no specific error code I can refer too either.

One browser's loss is another browser's gain: I just installed the latest trunk from Firefox Minefield after reading a lot of reviews about it. The browsers keep coming but you'll probably need to weed out the hype from reality...

IE8 Beta 2 is great... but I'll put it on hold till it stabilizes a bit more.

Time to call it a day,

Until next time,

God bless!
Readmore »»

Checking Compatability Issues While Upgrading From SQL Server 2000 / 2005 To SQL Server 2008

George P. Alexander Jr. (Software Engineer) posted 9/18/2008 | Comments (0)
I've been asked a couple of times whether it's risky to upgrade from SQL Server 2000/2005 to SQL Server 2008 or just go for a fresh install

Well, my SQL Server 2009 RTM install was not exactly a peaceful one. I had to uninstall my instance of SQL Server 2005 Express Edition to finally have SQL Server 2008 RTM working.

From a home user's point of view such as myself who mainly installs for exploring as a developer, I think it's not a big issue. Though I haven't seen any upgrades being done, I've seen many SQL Server 2000 databases move over to SQL Server 2005 environments without any issues either.

I'm sure that from a DBA's point of view within a corporate environment, an extensive understanding and analysis will be required together with the application development team as this would have to be handled in a case by case basis. Further, SQL Server 2008 is still in RTM and corporates would be cautious till SP1 is out.
If you want to check for computability issues for upgrading from your older version of SQL Server to SQL Server 2008, there is a useful tool out there that you can download for free from the Scalability Experts. It tells you if you might have compatibility issues while trying to upgrade from SQL Server 2000 / SQL Server 2005 to SQL Server 2008. SQL Server Upgrade Assistant 2008 helps you automate a test against your SQL Server 2000 or 2005 instance for compatability with SQL Server 2008. It also verifies how queries will function after a database has been upgraded.

So if you are thinking of an upgrade from an older version of SQL Server to SQL Server 2008, you might want to run it through this tool which executes a number of test plans to make it easier for you to decide.

Though there may not be a sure shot answer, this tool should help you make the decision drastically though.

Until next time,

Happy programming!
Readmore »»

Computer data storage

Computer data storage, often called storage or memory, refers to computer components, devices, and recording media that retain digital data used for computing for some interval of time. Computer data storage provides one of the core functions of the modern computer, that of information retention. It is one of the fundamental components of all modern computers, and coupled with a central processing unit (CPU, a processor), implements the basic computer model used since the 1940s.

In contemporary usage, memory usually refers to a form of semiconductor storage known as random access memory (RAM) and sometimes other forms of fast but temporary storage. Similarly, storage today more commonly refers to mass storage - optical discs, forms of magnetic storage like hard disks, and other types slower than RAM, but of a more permanent nature. Historically, memory and storage were respectively called primary storage and secondary storage.
The contemporary distinctions are helpful, because they are also fundamental to the architecture of computers in general. As well, they reflect an important and significant technical difference between memory and mass storage devices, which has been blurred by the historical usage of the term storage. Nevertheless, this article uses the traditional nomenclature.
Contents
[hide]

* 1 Purpose of storage
* 2 Hierarchy of storage
o 2.1 Primary storage
o 2.2 Secondary storage
o 2.3 Tertiary storage
o 2.4 Off-line storage
* 3 Characteristics of storage
o 3.1 Volatility
o 3.2 Differentiation
o 3.3 Mutability
o 3.4 Accessibility
o 3.5 Addressability
o 3.6 Capacity
o 3.7 Performance
o 3.8 Environmental Impact
* 4 Fundamental storage technologies
o 4.1 Semiconductor
o 4.2 Magnetic
o 4.3 Optical
o 4.4 Paper
o 4.5 Uncommon
* 5 Related technologies
o 5.1 Network connectivity
o 5.2 Robotic storage
* 6 See also
o 6.1 Primary storage topics
o 6.2 Secondary, tertiary and off-line storage topics
o 6.3 Data storage conferences
* 7 References

[edit] Purpose of storage

Many different forms of storage, based on various natural phenomena, have been invented. So far, no practical universal storage medium exists, and all forms of storage have some drawbacks. Therefore a computer system usually contains several kinds of storage, each with an individual purpose.

A digital computer represents data using the binary numeral system. Text, numbers, pictures, audio, and nearly any other form of information can be converted into a string of bits, or binary digits, each of which has a value of 1 or 0. The most common unit of storage is the byte, equal to 8 bits. A piece of information can be handled by any computer whose storage space is large enough to accommodate the binary representation of the piece of information, or simply data. For example, using eight million bits, or about one megabyte, a typical computer could store a small novel.

Traditionally the most important part of every computer is the central processing unit (CPU, or simply a processor), because it actually operates on data, performs any calculations, and controls all the other components.

Without a significant amount of memory, a computer would merely be able to perform fixed operations and immediately output the result. It would have to be reconfigured to change its behavior. This is acceptable for devices such as desk calculators or simple digital signal processors. Von Neumann machines differ in that they have a memory in which they store their operating instructions and data. Such computers are more versatile in that they do not need to have their hardware reconfigured for each new program, but can simply be reprogrammed with new in-memory instructions; they also tend to be simpler to design, in that a relatively simple processor may keep state between successive computations to build up complex procedural results. Most modern computers are von Neumann machines.

In practice, almost all computers use a variety of memory types, organized in a storage hierarchy around the CPU, as a tradeoff between performance and cost. Generally, the lower a storage is in the hierarchy, the lesser its bandwidth and the greater its access latency is from the CPU. This traditional division of storage to primary, secondary, tertiary and off-line storage is also guided by cost per bit.

[edit] Hierarchy of storage
Various forms of storage, divided according to their distance from the central processing unit. The fundamental components of a general-purpose computer are arithmetic and logic unit, control circuitry, storage space, and input/output devices. Technology and capacity as in common home computers around 2005.

[edit] Primary storage

Direct links to this section: Primary storage, Main memory, Internal Memory.

Primary storage, presently known as memory, is the only one directly accessible to the CPU. The CPU continuously reads instructions stored there and executes them as required. Any data actively operated on is also stored there in uniform manner.

Historically, early computers used delay lines, Williams tubes, or rotating magnetic drums as primary storage. By 1954, those unreliable methods were mostly replaced by magnetic core memory, which was still rather cumbersome. Undoubtedly, a revolution was started with the invention of a transistor, that soon enabled then-unbelievable miniaturization of electronic memory via solid-state silicon chip technology.

This led to a modern random access memory (RAM). It is small-sized, light, but quite expensive at the same time. (The particular types of RAM used for primary storage are also volatile, i.e. they lose the information when not powered).

As shown in the diagram, traditionally there are two more sub-layers of the primary storage, besides main large-capacity RAM:

* Processor registers are located inside the processor. Each register typically holds a word of data (often 32 or 64 bits). CPU instructions instruct the arithmetic and logic unit to perform various calculations or other operations on this data (or with the help of it). Registers are technically among the fastest of all forms of computer data storage.
* Processor cache is an intermediate stage between ultra-fast registers and much slower main memory. It's introduced solely to increase performance of the computer. Most actively used information in the main memory is just duplicated in the cache memory, which is faster, but of much lesser capacity. On the other hand it is much slower, but much larger than processor registers. Multi-level hierarchical cache setup is also commonly used—primary cache being smallest, fastest and located inside the processor; secondary cache being somewhat larger and slower.

Main memory is directly or indirectly connected to the CPU via a memory bus, today sometimes referred to as a front side bus. It is actually comprised of two buses (not on the diagram): an address bus and a data bus. The CPU firstly sends a number through an address bus, a number called memory address, that indicates the desired location of data. Then it reads or writes the data itself using the data bus. Additionally, a memory management unit (MMU) is a small device between CPU and RAM recalculating the actual memory address, for example to provide an abstraction of virtual memory or other tasks.

As the RAM types used for primary storage are volatile (cleared at start up), a computer containing only such storage would not have a source to read instructions from, in order to start the computer. Hence, non-volatile primary storage containing a small startup program (BIOS) is used to bootstrap the computer, that is, to read a larger program from non-volatile secondary storage to RAM and start to execute it. A non-volatile technology used for this purpose is called ROM, for read-only memory (the terminology may be somewhat confusing as most ROM types are also capable of random access).

Many types of "ROM" are not literally read only, as updates are possible; however it is slow and memory must be erased in large portions before it can be re-written. Some embedded systems run programs directly from ROM (or similar), because such programs are rarely changed. Standard computers do not store non-rudimentary programs in ROM, rather use large capacities of secondary storage, which is non-volatile as well, and not as costly.

Recently, primary storage and secondary storage in some uses refer to what was historically called, respectively, secondary storage and tertiary storage.[1]

[edit] Secondary storage
A hard disk drive with protective cover removed.

Secondary storage, or storage in popular usage, differs from primary storage in that it is not directly accessible by the CPU. The computer usually uses its input/output channels to access secondary storage and transfers the desired data using intermediate area in primary storage. Secondary storage does not lose the data when the device is powered down—it is non-volatile. Per unit, it is typically also an order of magnitude less expensive than primary storage. Consequently, modern computer systems typically have an order of magnitude more secondary storage than primary storage and data is kept for a longer time there.

In modern computers, hard disks are usually used as secondary storage. The time taken to access a given byte of information stored on a hard disk is typically a few thousandths of a second, or milliseconds. By contrast, the time taken to access a given byte of information stored in random access memory is measured in billionths of a second, or nanoseconds. This illustrates the very significant access-time difference which distinguishes solid-state memory from rotating magnetic storage devices: hard disks are typically about a million times slower than memory. Rotating optical storage devices, such as CD and DVD drives, have even longer access times.

Some other examples of secondary storage technologies are: flash memory (e.g. USB sticks or keys), floppy disks, magnetic tape, paper tape, punch cards, standalone RAM disks, and Zip drives.

The secondary storage is often formatted according to a filesystem format, which provides the abstraction necessary to organize data into files and directories, providing also additional information (called metadata) describing the owner of a certain file, the access time, the access permissions, and other information.

Most computer operating systems use the concept of virtual memory, allowing utilization of more primary storage capacity than is physically available in the system. As the primary memory fills up, the system moves the least-used chunks (pages) to secondary storage devices (to a swap file or page file), retrieving them later when they are needed. As more of these retrievals from slower secondary storage are necessary, the more the overall system performance is degraded.

[edit] Tertiary storage
Large tape library. Tape cartridges placed on shelves in the front, robotic arm moving in the back. Visible height of the library is about 180 cm.

Tertiary storage or tertiary memory,[2] provides a third level of storage. Typically it involves a robotic mechanism which will mount (insert) and dismount removable mass storage media into a storage device according to the system's demands; this data is often copied to secondary storage before use. It is primarily used for archival of rarely accessed information since it is much slower than secondary storage (e.g. 5-60 seconds vs. 1-10 milliseconds). This is primarily useful for extraordinarily large data stores, accessed without human operators. Typical examples include tape libraries and optical jukeboxes.

When a computer needs to read information from the tertiary storage, it will first consult a catalog database to determine which tape or disc contains the information. Next, the computer will instruct a robotic arm to fetch the medium and place it in a drive. When the computer has finished reading the information, the robotic arm will return the medium to its place in the library.

[edit] Off-line storage

Off-line storage, also known as disconnected storage, is a computer data storage on a medium or a device that is not under the control of a processing unit.[3] The medium is recorded, usually in a secondary or tertiary storage device, and then physically removed or disconnected. It must be inserted or connected by a human operator before a computer can access it again. Unlike tertiary storage, it cannot be accessed without human interaction.

Off-line storage is used to transfer information, since the detached medium can be easily physically transported. Additionally in case a disaster, for example a fire, destroys the original data, a medium in a remote location will be probably unaffected, enabling disaster recovery. Off-line storage increases a general information security, since it is physically inaccessible from a computer, and data confidentiality or integrity cannot be affected by computer-based attack techniques. Also, if the information stored for archival purposes is accessed seldom or never, off-line storage is less expensive than tertiary storage.

In modern personal computers, most secondary and tertiary storage media are also used for off-line storage. Optical discs and flash memory devices are most popular, and to much lesser extent removable hard disk drives. In enterprise uses, magnetic tape is predominant. Older examples are floppy disks, Zip disks, or punched cards.

[edit] Characteristics of storage
A 1GB DDR RAM memory module

Storage technologies at all levels of the storage hierarchy can be differentiated by evaluating certain core characteristics as well as measuring characteristics specific to a particular implementation. These core characteristics are volatility, mutability, accessibility, and addressibility. For any particular implementation of any storage technology, the characteristics worth measuring are capacity and performance.

[edit] Volatility

Non-volatile memory
Will retain the stored information even if it is not constantly supplied with electric power. It is suitable for long-term storage of information. Nowadays used for most of secondary, tertiary, and off-line storage. In 1950s and 1960s, it was also used for primary storage, in the form of magnetic core memory.
Volatile memory
Requires constant power to maintain the stored information. The fastest memory technologies of today are volatile ones (not a universal rule). Since primary storage is required to be very fast, it predominantly uses volatile memory.

[edit] Differentiation

Dynamic memory
A form of volatile memory which also requires the stored information to be periodically re-read and re-written, or refreshed, otherwise it would vanish.
Static memory
A form of volatile memory similar to DRAM with the exception that it does not refresh on occasion.

[edit] Mutability

Read/write storage or mutable storage
Allows information to be overwritten at any time. A computer without some amount of read/write storage for primary storage purposes would be useless for many tasks. Modern computers typically use read/write storage also for secondary storage.
Read only storage
Retains the information stored at the time of manufacture, and write once storage (WORM) allows the information to be written only once at some point after manufacture. These are called immutable storage. Immutable storage is used for tertiary and off-line storage. Examples include CD-ROM and CD-R.
Slow write, fast read storage
Read/write storage which allows information to be overwritten multiple times, but with the write operation being much slower than the read operation. Examples include CD-RW.

[edit] Accessibility

Random access
Any location in storage can be accessed at any moment in approximately the same amount of time. Such characteristic is well suited for primary and secondary storage.
Sequential access
The accessing of pieces of information will be in a serial order, one after the other; therefore the time to access a particular piece of information depends upon which piece of information was last accessed. Such characteristic is typical of off-line storage.

[edit] Addressability

Location-addressable
Each individually accessible unit of information in storage is selected with its numerical memory address. In modern computers, location-addressable storage usually limits to primary storage, accessed internally by computer programs, since location-addressability is very efficient, but burdensome for humans.
File addressable
Information is divided into files of variable length, and a particular file is selected with human-readable directory and file names. The underlying device is still location-addressable, but the operating system of a computer provides the file system abstraction to make the operation more understandable. In modern computers, secondary, tertiary and off-line storage use file systems.
Content-addressable
Each individually accessible unit of information is selected with a hash value, or a short identifier with a number pertaining to the memory address the information is stored on. Content-addressable storage can be implemented using software (computer program) or hardware (computer device), with hardware being faster but more expensive option.

[edit] Capacity

Raw capacity
The total amount of stored information that a storage device or medium can hold. It is expressed as a quantity of bits or bytes (e.g. 10.4 megabytes).
Density
The compactness of stored information. It is the storage capacity of a medium divided with a unit of length, area or volume (e.g. 1.2 megabytes per square inch).

[edit] Performance

Latency
The time it takes to access a particular location in storage. The relevant unit of measurement is typically nanosecond for primary storage, millisecond for secondary storage, and second for tertiary storage. It may make sense to separate read latency and write latency, and in case of sequential access storage, minimum, maximum and average latency.
Throughput
The rate at which information can be read from or written to the storage. In computer data storage, throughput is usually expressed in terms of megabytes per second or MB/s, though bit rate may also be used. As with latency, read rate and write rate may need to be differentiated. Also accessing media sequentially, as opposed to randomly, typically yields maximum throughput.

[edit] Environmental Impact
A low-power hard-drive made with recyclable aluminum and bamboo

The impact of a storage device on the environment.

Energy

* Energy star certified power adapters for storage devices reduce power consumption 30 percent on average[4]
* Storage devices that reduce fan usage, automatically shut-down during inactivity, and low power hard drives can reduce energy consumption 90 percent. [5]
* 2.5 inch hard disk drives often consume less power than larger ones.[6][7] Low capacity solid-state drives consume less power than DRAM, because they have no moving parts.[8][9][10] Also, memory may use more power than hard disks.[10]

Recycling

* Some devices are made of recyclable materials like aluminum, bamboo, or plastics
* Easily disassembled devices are easier to recycle if only certain parts are recyclable
* Packaging may be recyclable and some companies print instructions on the box or use recyclable paper for the instructions instead of waxed paper

Manufacturing

* The amount of raw materials (metals, aluminum, plastics, lead) used to manufacture the device
* Excess waste materials and if they are recycled
* Chemicals used in manufacturing
* Shipping distance for the device itself and parts
* Amount of packaging materials and if they are recyclable

[edit] Fundamental storage technologies

As of 2008, the most commonly used data storage technologies are semiconductor, magnetic, and optical, while paper still sees some limited usage. Some other fundamental storage technologies have also been used in the past or are proposed for development.

[edit] Semiconductor

Semiconductor memory uses semiconductor-based integrated circuits to store information. A semiconductor memory chip may contain millions of tiny transistors or capacitors. Both volatile and non-volatile forms of semiconductor memory exist. In modern computers, primary storage almost exclusively consists of dynamic volatile semiconductor memory or dynamic random access memory. Since the turn of the century, a type of non-volatile semiconductor memory known as flash memory has steadily gained share as off-line storage for home computers. Non-volatile semiconductor memory is also used for secondary storage in various advanced electronic devices and specialized computers.

[edit] Magnetic
[show]
v • d • e
Magnetic storage media

Wire (1898) • Tape (1928) • Drum (1932) • Ferrite core (1949) • Hard disk (1956) • Stripe card (1956) • MICR (1956) • Thin film (1962) • CRAM (1962) • Twistor (~1968) • Floppy disk (1969) • Bubble (~1970) • MRAM (1995) • Racetrack (2008)

Magnetic storage uses different patterns of magnetization on a magnetically coated surface to store information. Magnetic storage is non-volatile. The information is accessed using one or more read/write heads which may contain one or more recording transducers. A read/write head only covers a part of the surface so that the head or medium or both must be moved relative to another in order to access data. In modern computers, magnetic storage will take these forms:

* Magnetic disk
o Floppy disk, used for off-line storage
o Hard disk, used for secondary storage
* Magnetic tape data storage, used for tertiary and off-line storage

In early computers, magnetic storage was also used for primary storage in a form of magnetic drum, or core memory, core rope memory, thin film memory, twistor memory or bubble memory. Also unlike today, magnetic tape was often used for secondary storage.

[edit] Optical
[show]
v • d • e
Optical storage media

Compact Disc (1982) : CD-R (1988) · CD-RW (1997)
DVD (1995) : DVD-RAM (1996) · DVD-R (1997) · DVD-RW (1999) · DVD+RW (2001) · DVD+R (2002) · DVD+R DL (2004) · DVD-R DL (2005)
Other : Microform (1870) · Optical tape (20th century) · Laserdisc (1958) · UDO (2003) · ProData (2003) · UMD (2004) · Blu-ray Disc (2006) · HD DVD (2006)
Magneto-optic Kerr effect (1877) : MO disc (1980s) · MiniDisc (1991)
Optical Assist : Laser turntable (1986) · Floptical (1991) · Super DLT (1998)

Optical storage, the typical Optical disc, stores information in deformities on the surface of a circular disc and reads this information by illuminating the surface with a laser diode and observing the reflection. Optical disc storage is non-volatile. The deformities may be permanent (read only media ), formed once (write once media) or reversible (recordable or read/write media). The following forms are currently in common use:[11]

* CD, CD-ROM, DVD, BD-ROM: Read only storage, used for mass distribution of digital information (music, video, computer programs)
* CD-R, DVD-R, DVD+R BD-R: Write once storage, used for tertiary and off-line storage
* CD-RW, DVD-RW, DVD+RW, DVD-RAM, BD-RE: Slow write, fast read storage, used for tertiary and off-line storage
* Ultra Density Optical or UDO is similar in capacity to BD-R or BD-RE and is slow write, fast read storage used for tertiary and off-line storage.

Magneto-optical disc storage is optical disc storage where the magnetic state on a ferromagnetic surface stores information. The information is read optically and written by combining magnetic and optical methods. Magneto-optical disc storage is non-volatile, sequential access, slow write, fast read storage used for tertiary and off-line storage.

3D optical data storage has also been proposed.
Readmore »»

Saturday, December 13, 2008

Robots.txt

If you want that a search engine doesn't index a file or a folder containing files of your website, you must create a file called robot.txt. So, open your Notepad or another editor of txt files and write into the following commands:

User-agent: *
Disallow: /admin/

In the example above we exclude the folder 'admin' from the indexing of all search engines. User-agent represents the search engine and the * means 'all'. After Disallow you must write the folder or the file to exclude from the indexing.

If you want to exclude the folder 'admin' from the indexing of Google only, you must write into the file robot.txt the following commands:

User-agent: googlebot
Disallow: /admin/

If ypu want to exclude more than a folder you must write:

User-agent: googlebot
Disallow: /admin/
Disallow: /log/
Disallow: /stats/

In this case we have excluded the folders: 'admin', 'log', 'stats'.

As last example we want to exclude the file file.html from the indexing of all search engines. We must write:

User-agent: *
Disallow: file.html
Readmore »»

JavaScript

Often, in my internet project, I need to use the following javascript functions, that I consider very usefull:

Reload of a page:
function reload()
{
window.self.location.reload();
}

Automatic reload of a page (after 5 seconds)
function reload()
{
window.self.location.reload();
}
self.settimeout( 'reload()',5000);
alert("Page reloaded");

Link to go back
Go back

Open a popup window
function open_popup()
{
window.open("page.html","name of the window","width=500, height=400, left=200, top=300, scrollbars=yes);
} Readmore »»

Monday, December 8, 2008

Virtualized computing environments can take advantage of built-in virtualization support in modern dual-core processors, but when it comes to 3-D acceleration in virtual machines, almost all fall flat on their faces. VMGL is a little-known application written as part of Google's Summer of Code 2006 program that lets OpenGL apps running inside a virtual machine take advantage of the graphics hardware acceleration on the host. It has limitations, but if you want 3-D in VMs, VMGL is your best bet.

The closest any virtualization platform has come to offering native 3-D in VMs is the recently released VMware 6.5 which lets you run OpenGL 2.0 apps in Windows XP guests. But it works only with certain ATI and Nvidia graphics, and not with on-board Intel graphics. This is a serious limitation, considering most recent Intel graphics have enough juice to power most shoot-'em-ups and racing simulators that run on Linux distros.
VMGL, on the other hand, works with all ATI, Nvidia, and Intel cards. Basically, if your host can do 3-D, then with VMGL so can your VMs. Another advantage in using VMGL is that it works across virtualization platforms. I've tried it on VMs virtualized by VMware and VirtualBox, and it should also work on Xen and KVM too.
glxgears inside a VirtualBox guest. Click to enlarge.

VMGL runs apps (and games) that use the OpenGL library. The current version of VMGL supports OpenGL v1.5 with some exceptions that are mentioned in the document included in the source tarball. You can also install VMGL from the available RPMs.

You can run 3-D apps two ways in VMs using VMGL. The recommended method is to run a VMGL-modified VNC server in the VM and connect to it from the host. The second method is available only to VMware users, and because of its closed-source nature is fairly complicated. The VNC-method is easier to set up and works across virtualization platforms.

The easiest way to set up VMGL is by using the two RPMs -- one for the host distro and the other for the guest. On Debian-based systems, you can either use alien to convert the RPM file to .deb, or install VMGL from the tarball as documented in the bundled install file. You'll also need a few libraries (libXaw, libXext, libjpeg, libXmu) as well as their devel packages.

Once the dependencies have been satisfied and the packages installed, you need to tweak the Xorg configuration file on the guest distro to load the vmglext module. Edit the xorg.conf file (usually under /etc/X11) and under the Module section add the line:

Load "vmglext"

Save the file and restart X, then start the custom VNC server installed by VMGL, which if you installed the RPMs means issuing the Xvnc :1 command. If you have multiple VNC servers installed, make sure you are using the one provided by VMGL, which by default installs under /usr/local/bin.
VMGL running Quake 3 Arena inside a VMware guest. Click to enlarge.

Since the custom VNC server is based on an older release, it expects to find fonts under /usr/X11R6/lib/X11/fonts. You can work around this by either creating a symlink to the location of X11 fonts on your system (usually /usr/share/fonts) or starting Xvnc with the -fp switch followed by the path to the fonts, as in Xvnc -fp /usr/share/fonts/ :1.

Now head back to the host and use the VMGL-modified vncviewer (which by default installs under /usr/local/bin) to connect to the Xvnc server running on the guest. For instance, if the IP address of the guest VM is 192.168.2.55, vncviewer 192.168.2.55:1 will connect to the VM and open a window with a gray background, because the guest is running the Xvnc server without any apps.

Before you can run the apps, take note of the output in the window where you issued the vncviewer command. It'll say something similar to Set GLSTUB var in guest to point to port 7001. Head to the guest, and in a terminal window issue the command export GLSTUB=192.168.2.55:7001, replacing the IP address with your guest's address, and the port number with the one prompted by vncviewer.

You should now be all set. Run glxinfo in the guest; it should list vmgl as the glx vendor. Then compare the 3-D rendering speed between the guest and host by running glxgears on both. This isn't an exact benchmark but it gives you some numbers to compare. If you don't have glxinfo and glxgears, install the mesa-demos package for your distro.
Looking ahead

If VMGL doesn't run your favorite 3-D app, don't expect any quick updates, because the current priority for its author, H. Andrés Lagar-Cavilla, is to get his Ph.D. degree. But he does have some ideas to implement and is currently helping another developer implement Windows compatibility for VMGL, which will enable Windows guests to run 3-D apps on top of a Linux host.

Running 3-D apps via VNC with VMGL may look inconvenient at first, especially when you consider the fact that it currently works only on Linux guests over Linux hosts. But if you want your VMs to be as well equipped, graphically-speaking, as their hosts, there's no beating VMGL.
Readmore »»

Thursday, December 4, 2008

Networking

Network security is a complicated subject, historically only tackled by well-trained and experienced experts. However, as more and more people become ``wired'', an increasing number of people need to understand the basics of security in a networked world. This document was written with the basic computer user and information systems manager in mind, explaining the concepts needed to read through the hype in the marketplace and understand risks and how to deal with them.

Some history of networking is included, as well as an introduction to TCP/IP and internetworking . We go on to consider risk management, network threats, firewalls, and more special-purpose secure networking devices.

This is not intended to be a ``frequently asked questions'' reference, nor is it a ``hands-on'' document describing how to accomplish specific functionality.

It is hoped that the reader will have a wider perspective on security in general, and better understand how to reduce and manage risk personally, at home, and in the workplace.

Readmore »»

Wireless Networks

Amazon.com Review
Among network designers and administrators, wired Ethernet is a known quantity. Plenty is known about how to build good twisted-pair network infrastructures, how to keep them secure, and how to monitor their excess capacity. Not so for the wireless Ethernet networks (built around the IEEE 802.11x standards)--these hold much more mystery for even experienced network designers. 802.11 Wireless Networks: The Definitive Guide aims to codify the body of knowledge needed to design and maintain wireless local area networks (LANs). The authors succeed admirably in this, covering what installation and administration teams need to know and digging into information of use to driver writers and others working at lower levels.

The only significant detail that's been excluded has to do with security--a notorious weak point of 802.11x LANs. The authors cover the feeble but widely used Wired Equivalent Privacy (WEP) authentication protocol in detail and devote another whole chapter to 802.1x, which is an emerging authentication scheme based on Extensible Authentication Protocol (EAP). The author has considerable skill in communicating information graphically and does a great job of using graphs to show how communications frequencies shift over time and how conversations among access points and network nodes progress over time. This is indeed an authoritative document. --David Wall

Topics covered: How IEEE 802.11a and 802.11b wireless networks (also known as WiFi networks) work, and how to configure your own. The framing specification is covered well, as are authentication protocols and (in detail) the physical phenomena that affect IEEE 802.11x radio transmissions. There's advice on how to design a wireless network topology, and how to go about network traffic analysis and performance improvement. --This text refers to an out of print or unavailable edition of this title.

Review
'Building Wireless Community Networks is an enthusiastic introductory guide to a technology which can really be put to use to change people's lives. Wireless gives the power of the network back to the people, and this book helps to demystify the technology and enable any community to take control.' Linux User, March/April (Classic Title) --This text refers to an out of print or unavailable edition of this title.
Readmore »»

Friday, March 14, 2008

Database

The importance of efficient SQL statements in an Oracle-based application cannot be downplayed; poorly written ones can cause havoc in the database. Because in many organizations power users access the production databases via reporting tools and direct queries, efficiently written SQL not only results in better application performance but also reduces traffic on the network. Therefore, power users as well as developers must have a good understanding of Oracle's optimizer and of tuning concepts that can make their statements more efficient and less risky.
In this article, I'll summarize 25 of the most useful SQL tuning tips for making SQL statements run faster. Although some of these techniques have been previously described in Oracle manuals and various journals, many others have never been published and are appearing here for the first time.

1. Know your data and business application well.
Identical information can often be retrieved from different business data sources. Familiarize yourself with these sources; you must be aware of the data volume and distribution in your database. Your should also have a thorough understanding of your data model--such as the relationships among business entities--before writing your SQL. This understanding will help you write much better queries for retrieving information from multiple tables. CASE tools such as Designer/2000 do a very good job of documenting relations among different business and database objects.
2. Test your queries with realistic data.
Most organizations have three database environments: development, test, and production. Programmers use the development database environment to create and test applications, which are then more rigorously examined in the test environment by programmers and users before they are migrated to the production environment.
When a SQL is being tested in the test environment, make sure the test database contains data that reflects the production database. A SQL statement tested with unrealistic data may behave differently when used in production. To ensure rigorous testing, the data distribution in the test environment must also closely resemble that in the production environment.
3. Write identical SQL statements in your applications.
Take full advantage of bind variables, stored procedures, and packages wherever possible. The benefits of identical SQL statements include reduced memory use on the database server and faster execution, as parsing is unnecessary. For example, these statements are not identical:

select * from employee where empid = 10;
SELECT * FROM EMPLOYEE WHERE EMPID = 10;
select * from employee where empid = 20;
but when using a bind variable named i_empid, the statement would be:
select * from employee where empid = :i_empid;


4. Use indexes on the tables craefully.
Be sure to create all the necessary indexes on the tables. However, too many of them can degrade performance. So how do you choose which columns to index?
* Make indexes on columns that are used frequently in the WHERE clause of the application SQL or queries used by end users.
* Index those columns that are used frequently to join tables in SQL statements.
* Use only index columns that have a small percentage of rows with the same value.
* Do not make indexes on those columns that are used only with functions and operators in the WHERE clause of queries.
* Do not index columns that are frequently modified or when the efficiency gained due to index creation results in more efficiency loss due to inserts, updates, and deletes. These operations will slow down due to the need to maintain indexes.
* Unique indexes are better than nonunique indexes because of better selectivity. Use unique indexes on primary key columns and nonunique indexes on foreign keys and columns frequently used in the WHERE clause.
* Create the index so that the columns used in the WHERE clause make up a leading portion of the index.
5. Make an indexed path available.
To take advantage of indexes, write your SQL in such a manner that an indexed path is available to it. The optimizer cannot use an access path that uses an index simply because the index exists; the access path must be made available by the SQL. Using SQL hints is one of the ways to ensure the index is used. See the following tips to select a particular access path.
6. Use Explain Plan and TKPROF where possible.
If your SQL statements are not well-tuned, they may be inefficient even if the Oracle database itself is "well-oiled." Become familiar with Explain Plan and TKPROF tools and use them to your advantage. Explain Plan helps in discovering the access path used by a SQL; TKPROF shows its actual performance statistics. These tools are bundled with Oracle server software and can help you improve SQL performance.
7. Understand the optimizer.
SQL can be executed by using either a rule-based optimizer or cost-based optimizer approach. The rule-based optimizer approach is more common in older applications; many Oracle shops have used this approach for years and are quite happy with it. But for new applications, consider using the cost-based optimizer. Oracle is updating the cost-based optimizer in each release, making it more stable and reliable. If you choose to use it, be sure to perform ANALYZE schema regularly. ANALYZE schema stores database statistics in the data dictionary tables, which are then used by the cost-based optimizer.
SQL can be tuned only when using the cost-based optimizer. If you're planning to switch from the rule-based approach to the cost-based optimizer approach, you should evaluate the performance of every SQL statement in every application using the database.
8. Think globally when acting locally.
Always remember: Any changes you make in the database to tune one SQL statement may affect the performance of other statements used by applications and users.
9. The WHERE clause is crucial.
The following WHERE clauses would not use the index access path even if an index is available (COL1 and COL2 are in the same table and the index is created on COL1):
* COL1 > COL2
* COL1 <> = COL2
* COL1 <= COL2 * COL1 IS NULL * COL1 IS NOT NULL. An index does not store the ROWIDs for columns that have null values. So querying for rows with null values cannot use that index. * COL1 NOT IN (value1, value2 ) * COL1 != expression * COL1 LIKE '%pattern'. In this case, the leading edge of the index is suppressed so the index cannot be used. On the other side, COL1 LIKE 'pattern%' or COL1 LIKE 'pattern%pattern%' can use index because they would result in a bounded-range index scan. * NOT EXISTS subquery * expression1 = expression2. Any expressions, functions, or calculations involving indexed columns would prohibit usage of the index. In the following example, using the UPPER SQL function would prevent index scan and result in a full table scan.
 SELECT DEPT_NAME
FROM DEPARTMENT
WHERE UPPER(DEPT_NAME) like 'SALES%';
10. Use WHERE instead of HAVING for record filtering.
Avoid using the HAVING clause along with GROUP BY on an indexed column. In this case, the index is not used. Furthermore, exclude rows with WHERE clause rather than using HAVING. If the EMP table has an index on column DEPTID, the following query cannot take advantage of it:

SELECT DEPTID,
SUM(SALARY)
FROM EMP
GROUP BY DEPTID
HAVING DEPTID = 100;


However, the same query can be rewritten to exploit the index:

SELECT DEPTID,
SUM(SALARY)
FROM EMP
WHERE DEPTID = 100
GROUP BY DEPTID;


11. Specify the leading index columns in WHERE clauses.
For a composite index, the query would use the index as long as the leading column of the index is specified in the WHERE clause. The following query would use the composite index based on the primary key constraint on the PART_NUM and PRODUCT_ID columns:

SELECT *
FROM PARTS
WHERE PART_NUM = 100;


whereas this query would not use the composite index:

SELECT *
FROM PARTS
WHERE PRODUCT_ID = 5555;


The same request can rewritten to take advantage of the index. In this query, it is assumed that the PART_NUM column will always have a value greater than zero:

SELECT *
FROM PARTS
WHERE PART_NUM > 0
AND PRODUCT_ID = 5555;


12. Evaluate index scan vs. full table scan.
If selecting more than 15 percent of the rows from a table, full table scan is usually faster than an index access path. In such cases, write your SQLs so that they use full table scans.
The following statements would not use index scans even if an index is created on the SALARY column. In the first SQL, using the FULL hint forces Oracle to employ full table scan. When using an index does more harm than good, you can also use these techniques to suppress the use of the index.

SELECT * --+FULL
FROM EMP
WHERE SALARY = 50000;
SELECT *
FROM EMP
WHERE SALARY+0 = 50000;


The following statements would not use index scans even if an index is created on the SS# column:

SELECT *
FROM EMP
WHERE SS# || ' ' = '111-22-333';


An index is also not used if Oracle has to perform implicit data conversion. For the following example, SALARY is a numeric column in the table EMP and a character value is converted into a numeric value:

SELECT *
FROM EMP
WHERE SALARY = '50000';


When the percentage of table rows accessed is 15 percent or less, an index scan will work better because it results in multiple logical reads per row accessed, whereas a full table scan can read all the rows in a block in one logical read. Thus, the performance of full table scan is better when accessing a large percentage of rows from a table.
To illustrate this point, say the ANALYZE command is issued against the EMP table and all its indexes. Oracle generates the following statistics in the data dictionary table USER_TABLES and USER_INDEXES:

Table Statistics:
NUM_ROWS = 1000
BLOCKS = 100


Index Statistics:
BLEVEL = 2
AVG_LEAF_BLOCKS_PER_KEY = 1
AVG_DATA_BLOCKS_PER_KEY = 1


Based on these statistics, the following would be the logical reads (block accessed) for different types of scans:

Use of index to return one row = 3
(BLEVEL+(AVG_LEAF_BLOCKS_PER_KEY - 1) + AVG_DATA_PER_KEY
Full table scan = 100
(BLOCKS)
Use of index to return all rows = 3000
(NUM_ROWS * Blocks accessed to return one row using index)

13. Use ORDER BY for index scan.
Oracle's optimizer will use an index scan if the ORDER BY clause is on an indexed column. The following query illustrates this point. This query would use the index available on EMPID column even though the column is not specified in the WHERE clause. The query would retrieve ROWID for each row from the index and access the table using the ROWID.

SELECT SALARY
FROM EMP
ORDER BY EMPID;

If this query performs poorly, you can try another alternative by rewriting the same query using the FULL hint described earlier (Number 12).

14. Know thy data.
As I've already explained, you have to know your data intimately. For example, say you have a table called BOXER containing two columns--BOXER_NAME and SEX--with a nonunique index on column SEX. If there are an equal number of male and female boxers, the following query will run faster if Oracle performs a full table scan:

SELECT BOXER_NAME
FROM BOXER
WHERE SEX = 'F';
You can ensure the query performs a full table scan by rewriting it as :

SELECT BOXER_NAME --+ FULL
FROM BOXER
WHERE SEX = 'F';

If the table contains 980 male boxers, this query would be faster because it results in index scan:

SELECT BOXER_NAME --+ INDEX (BOXER BOXER_SEX)
FROM BOXER
WHERE SEX = 'F';

This example illustrates the importance of being familiar with data distribution. SQL performance will vary as the database grows and data distribution changes. Oracle added a HISTOGRAMS function with Oracle7.3 so that the optimizer can be aware of the data distribution in a table and select an appropriate execution plan.

15. Know when to use large-table scans.
When retrieving rows from a very small table or very large table, a full table scan may result in better performance over an index scan. An index scan on a very large table may require scanning of many index and table blocks. When these blocks are brought in the database buffer cache, they are kept as long as possible. These blocks may not be needed by other queries so the database buffer hit ratio may decline and the performance of a multiuser system may suffer. However, the blocks read by a full table scan are removed from the database buffer cache much earlier and the database buffer hit ratio is not affected.

16. Minimize table passes.
Usually, reducing the number of table passes in a SQL query results in better performance. Queries with fewer table passes mean faster queries. Here's an example. The STUDENT table has four columns named NAME, STATUS, PARENT_INCOME, and SELF_INCOME. The name is the primary key. The values of the STATUS column is 0 for independent students and 1 for dependent students.
The following query returns the name and income for dependent as well as independent students. It results in two passes through the STUDENT table, creates a temporary table for processing, and initiates a sort to eliminate duplicates:

SELECT NAME, PARENT_INCOME
FROM STUDENT
WHERE STATUS = 1
UNION
SELECT NAME, SELF_INCOME
FROM STUDENT
WHERE STATUS = 0;


The same request can be fulfilled by this query, which results in only one pass through the table:

SELECT NAME, PARENT_INCOME*STATUS + SELF_INCOME(1-STATUS)
FROM STUDENT;


17. Join tables in the proper order.
The order in which tables are joined in a multiple table join is crucial. Overall, fewer rows will be processed if tables are joined in the correct order.
Always perform the most restrictive search first to filter out the maximum number of rows in the early phases of a multiple table join. This way, the optimizer will have to work with fewer rows in the subsequent phases of join, improving performance. You should carry fewer rows to the subsequent phases of a join. Furthermore, make sure that the driving table (the table searched first in the nested loop join) is the table that returns the least number of rows. In a master and detail tables join (i.e., ORDERS and ORDER LINE ITEMS tables), ensure that the master table is connected first; connecting a detail table first will usually result in more rows getting joined.
For the rule-based optimizer, the driving table should be the last table specified in the FROM clause. The rule-based optimizer makes the last table specified in the FROM clause the driving table in the nested loop join. If the join is resulting in nested loop join, consider making index available for the inner table search. Explain Plan and TKPROF output show the join type, table join order, and number of rows processed in every phase of a join.
For the cost-based optimizer, the order in which tables appear in the WHERE clause is irrelevant as the optimizer will try to find the best execution plan on its own. Consider using the ORDERED hint to control the table join order. In the following query, tables would be joined in the order in which they appear in the WHERE clause:

SELECT ORDERS.CUSTID, ORDERS.ORDERNO,
ORDER_LINE_ITEMS.PRODUCTNO --+ORDERED
FROM ORDERS, ORDER_LINE_ITEMS
WHERE ORDERS.ORDERNO = ORDER_LINE_ITEMS.ORDERNO;


18. Use index-only searches when possible.
If possible, write queries that use index-only searches. The optimizer will need to search only the index and not the table to satisfy such queries, so performance is better; the optimizer will use an index-only search if all the information to satisfy the SQL can be found in the index itself. If the EMP table has a composite index on LANME and FNAME columns, the following query will result in index-only search:

SELECT FNAME
FROM EMP
WHERE LNAME = 'SMITH';

whereas this query results in an index scan as well as table search by ROWID:

SELECT FNAME , SALARY
FROM EMP
WHERE LNAME = 'SMITH';

Therefore, pay close attention to the column list in the SELECT clause. Include only those columns that you really need.

19. Redundancy is good.
Provide as much information as possible in the WHERE clause. For example, if the WHERE clause is WHERE COL1 = COL2 and COL1 = 10, the optimizer will infer that COL2 =10. But if the WHERE clause is WHERE COL1 = COL2 and COL2 = COL3, then optimizer will not infer that COL1 = COL3.

20. Keep it simple, stupid.
Make your SQL statements as simple as possible. Very complex SQL statements can overwhelm the optimizer; sometimes writing multiple, simpler SQLs will yield better performance than a single complex SQL statement. Oracle's cost-based optimizer is not completely robust. It's in the development stage but getting better with each Oracle release. As a result, you have to keep an eye on the Explain Plan cost estimate. "Cost" is a relative term--nobody seems to know what the cost numeric value means--but the smaller this value, the better the SQL performance. So tune the statement for the lower cost.
It may often be more efficient to use temporary tables and break up a complex SQL join involving many tables. For example, if a join involves eight tables with large amount of data, it might be better to split the SQL into two or three SQLs, each involving at most a four-table join and storing the intermediate results in precreated temporary tables.

21. You can reach the same destination in different ways.
In many cases, more than one SQL statement can get you the same desired results. Each SQL may use a different access path and may perform differently. For example, the MINUS operator can be much faster than using WHERE NOT IN (SELECT ) or WHERE NOT EXISTS.
Let's say we have an index on a STATE column and another index on an AREA_CODE column. Despite the availability of indexes, the following statement will require a full table scan due to the usage of the NOT IN predicate:

SELECT CUSTOMER_ID
FROM CUSTOMERS
WHERE STATE IN ('VA', 'DC', 'MD')
AND AREA_CODE NOT IN (804, 410);


However, if the same query is rewritten as the following, it will result in index scans:

SELECT CUSTOMER_ID
FROM CUSTOMERS
WHERE STATE IN ('VA', 'DC', 'MD')
MINUS
SELECT CUSTOMER_ID
FROM CUSTOMERS
WHERE AREA_CODE IN (804, 410);


If a SQL involves OR in the WHERE clause, it can also be rewritten by substituting UNION for OR in the WHERE clause. You must carefully evaluate execution plans of all SQLs before selecting one to satisfy the information request. You can use Explain Plan and TKPROF tools for this process.

22. Use the special columns.
Take advantage of ROWID and ROWNUM columns. Remember, the ROWID search is the fastest. Here's an example of UPDATE using ROWID scan:

SELECT ROWID, SALARY
INTO TEMP_ROWID, TEMP_SALARY
FROM EMPLOYEE;
UPDATE EMPLOYEE
SET SALARY = TEMP_SALARY * 1.5
WHERE ROWID = TEMP_ROWID;


A ROWID value is not constant in a database, so don't hard-code a ROWID value in your SQLs and applications.
Use ROWNUM column to limit the number of rows returned. If you're not sure how many rows a SELECT statement will return, use ROWNUM to restrict the number of rows returned. The following statement would not return more than 100 rows:

SELECT EMPLOYE.SS#, DEPARTMENT.DEPT_NAME
FROM EMPLOYEE, DEPENDENT
WHERE EMPLOYEE.DEPT_ID = DEPARTMENT.DEPT_ID
AND ROWNUM <>

23. Use explicit cursors over implicit cursors.
Implicit cursors result in an extra fetch. Explicit cursors are opened by developers by using DECLARE, OPEN, FETCH and CLOSE cursor statements. Implicit cursors are opened by Oracle for DELETE, UPDATE, INSERT and SELECT statements.

24. Explore and take advantage of the Oracle parallel query option.
Using the parallel query option, you can execute SQL in parallel for faster performance. In Oracle7, only queries based on a full table scan can be processed in parallel. In Oracle8, queries based on indexed range scans can be parallelized if the index is partitioned. Parallel query option should be used only for SMP and MPP systems containing multiple disk drives.
The Oracle server has many features, but the presence of these features alone does not ensure faster performance. You must configure the database for these features and write SQL specifically to take advantage of them. For example, the following SQL would be executed in parallel:

SELECT * --+PARALLEL(ORDERS,6)
FROM ORDERS;


25. Reduce network traffic and increase throughput.
Using array processing and PL/SQL blocks can achieve better performance as well as reduce network traffic. Array processing allows a single SQL statement to process multiple rows. For example, using arrays in an INSERT statement can insert 1,000 rows in a table. Significant performance gains can be achieved in client/server and batch systems using this technique.
Multiple SQL statements can cause heavy network traffic. However, if the SQL statements are within a single PL/SQL block, the entire block can be sent to the Oracle server, processed there, and results returned to the application running on the client.

Faster Than Fast


Developers and users often treat SQL as a simple method of sending and retrieving data from the database. Sometimes applications are written using code generators without writing SQL directly, resulting in significant performance problems. Their performance degrades as the database continues to grow.
Because SQL is flexible, one can get the same results with many different statements, but some statements are more efficient than others. Using the tips and techniques described here, applications and customized reports can be designed to provide information to users as quickly as possible.

Suresh Aiyer is a senior consultant based in the Washington, D.C. area. He specializes in the design, development, and administration of Oracle-based systems. He can be reached at (703) 716-2555.
Readmore »»

Cisco

Expert guidance for securing your 802.11 networks

  • Learn best practices for securely managing, operating, and scaling WLANs
  • Comprehend the security-related technological underpinnings of WLANs
  • Explore new security protocols in 802.11i and WPA and learn how they prevent attacks
  • Review centralized deployment models for wired/wireless integration
  • Deepen your knowledge of defense by understanding the tools that attackers use to perform reconnaissance and to attack authentication and encryption mechanisms
  • Understand how to design secure WLANs to support enterprise applications with the new standards and practices detailed in this book
  • Reference the next generation authentication standards and protocols
  • Find out about mobility, hotspots, and campus wireless networks
  • Grasp Open Authentication, MAC-based authentication, shared key authentication, EAP authentication protocols, WEP, WPA, and 802.11i

Cisco Wireless LAN Security is an in-depth guide to wireless LAN technology and security, introducing the key aspects of 802.11 security by illustrating major wireless LAN (WLAN) standards that can protect the entire network. Because a WLAN is less effective as an isolated piece of the network, this book emphasizes how to effectively integrate WLAN devices into the wired network while maintaining maximum security.

Cisco Wireless LAN Security covers the spectrum of WLAN security, including protocols and specifications, vulnerabilities and threats, and, especially, deployment patterns and design guidelines. With a unique combination of theory and practice, this book addresses fundamental wireless concepts, such as WEP, and innovations, such as EAP, switching, and management. Each chapter includes detailed illustrations, checklists, design templates, and other resources. You will also find generic wireless deployment patterns based on real-world customer installations and functional examples of architecture, design, and best practices.

Whether you currently design, configure, implement, and maintain WLANs or simply want to explore wireless security issues, Cisco Wireless LAN Security has everything you need to understand how to create a seamlessly secure, impenetrable 802.11 network.

This book is part of the Networking Technology Series from Cisco Press¿ which offers networking professionals valuable information for constructing efficient networks, understanding new technologies, and building successful careers.

Readmore »»

Bogger

Antok Mashuri