<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.linuxquestions.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chalupamaster92</id>
	<title>LQWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxquestions.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chalupamaster92"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/wiki/Special:Contributions/Chalupamaster92"/>
	<updated>2026-04-10T18:49:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.0</generator>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Disk_partitioning&amp;diff=13621</id>
		<title>Disk partitioning</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Disk_partitioning&amp;diff=13621"/>
		<updated>2004-10-26T16:40:40Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Added detail,  plus a 37-page anti-corporate manifesto.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Partitioning==&lt;br /&gt;
&lt;br /&gt;
Partitioning is the act of dividing a hard drive or other storage media into sections,  each of which can hold its own file system.  The BIOS of the computer is informed of the partitioning through a special area near the beginning of the hard drive called the partition table.&lt;br /&gt;
&lt;br /&gt;
From an end user's point of view,  partitioning is important because it can be used to create dual-boot systems and give older hardware access to more of the storage on newer hard drives.  For example,  a simple dual-boot partitioning scheme might have an NTFS partition containing Windows XP,  a partition for a Linux root directory,  a third partition for home directories,  and a Linux swap partition.  &lt;br /&gt;
&lt;br /&gt;
On many systems,  there is a maximum limit of four primary partitions.  It is possible for each primary partition to be divided into numerous logical partitions,  but this process can be tricky.&lt;br /&gt;
&lt;br /&gt;
A list of partitioning tools and techniques can be found in [[Disk_and_tape_drive_commands]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=People&amp;diff=8004</id>
		<title>People</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=People&amp;diff=8004"/>
		<updated>2004-04-19T02:25:07Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Added two names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Linux]] was originally created by Linus Torvalds with the assistance of developers around the world. This page is dedicated to those people. Here's a list of the most important contributors to the Linux community.&lt;br /&gt;
&lt;br /&gt;
===Important People===&lt;br /&gt;
* [[Linus Torvalds]] - Founder of the [[Linux]] kernel.&lt;br /&gt;
* [[RMS|Richard M. Stallman]] -  Founder of the [[Free Software]] movement.&lt;br /&gt;
* [[Miguel de Icaza]] - founder of [[Ximian]], the [[GNOME]] project and the [[Mono]] project. He has also been a kernel and [[Wine]] contributor.&lt;br /&gt;
* [[ESR|Eric S. Raymond]] - One of the primary advocates of the [[Open Source]] movement.&lt;br /&gt;
* [[Brian Behlendorf]] - President of the Apache Software Foundation and creator of the [[Apache|Apache Web Server]].&lt;br /&gt;
* [[Andrew Tridgell]] - Lead developer for [[Samba]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=22567</id>
		<title>Emacs keystrokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=22567"/>
		<updated>2004-04-19T02:09:18Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''[[Emacs]]''' works its text-editing wonders through a combination of indirection and Lisp-jitsu.  When you type a key--'k', for instance--Emacs doesn't simply paint the character on the screen, it takes the keystroke and sees what sort of commands are &amp;quot;bound&amp;quot; to it.  In the case of 'k',  the command it issues is a straightforward &amp;quot;insert me where the cursor is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
At this point,  no advantage is apparent.  But the commands bound to a keystroke can be arbitrarily complex.  For example,  when Emacs is running in [[C]] [[Emacs_modes|mode]],  pressing the &amp;lt;TAB&amp;gt; key doesn't indent everything after the cursor by a single tabspace.  Instead,  it analyzes the code that you are writing,  and indents the entire line to whatever depth appears to make the most sense.&lt;br /&gt;
&lt;br /&gt;
There are many more examples,  but the upshot is that if you're willing to learn the Emacs way,  there are many tips and tricks to pick up that can make it a very productive environment.  Just be warned that,  before it's over,  you're going to be bending and contorting your fingers in ways you never imagined.&lt;br /&gt;
&lt;br /&gt;
==Basic Keystrokes==&lt;br /&gt;
&lt;br /&gt;
The keystroke &amp;lt;CTRL&amp;gt;+X is generally represented as C-x,  while &amp;lt;META&amp;gt;-v would be displayed with the shorthand M-v.  The meta key varies from system to system,  but is usually the &amp;lt;ALT&amp;gt; key.  The &amp;lt;ESC&amp;gt; key can be pressed before any key to simulate the &amp;lt;META&amp;gt; version of that key.&lt;br /&gt;
&lt;br /&gt;
If two commands are separated by a comma (C-p, C-n for example) then they are separate commands.  Otherwise they are part of the same command.  For example,  C-x C-s means you type &amp;lt;CTRL&amp;gt;-x,  then &amp;lt;CTRL&amp;gt;-s to execute the command.&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
* C-p, C-n, C-f, C-b :  Functionally equivalent to the arrow buttons. C-p moves the cursor up to the '''p'''revious line,  C-n moves it down to the '''n'''ext line,  C-f moves one space '''f'''orward,  and C-b moves one space '''b'''ackwards.  It may seem silly to have these commands when the arrow keys are right there.  But once you're used to them [and they do take some getting used to] you may decide that 'right there' just isn't close enough,  and it's nice to be able to navigate without moving your hands away from normal typing position.&lt;br /&gt;
&lt;br /&gt;
* C-a, C-e :  C-a moves to the beginning of a line ('''a''' is the beginning of the alphabet),  while C-e moves to the '''e'''nd of the line.&lt;br /&gt;
&lt;br /&gt;
''Note: These keystrokes aren't specific to Emacs.  For example,  all six work on the command line,  and they also work inside forms on the web browser I'm using to type this.  You may find it advantageous to try and make them second nature.''&lt;br /&gt;
&lt;br /&gt;
* C-l :  Centers your view of the buffer so that the cursor is in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
* C-v, M-v :  Move the cursor up and down by half a page of text at a time.&lt;br /&gt;
&lt;br /&gt;
* M-&amp;lt;, M-&amp;gt; :  Moves the cursor to the beginning and end of the entire document.&lt;br /&gt;
&lt;br /&gt;
===Files and Buffers===&lt;br /&gt;
&lt;br /&gt;
* C-x C-s :  Saves the current buffer.  If there is no file associated with the buffer,  Emacs prompts for a filename.&lt;br /&gt;
&lt;br /&gt;
* C-x C-w :  Saves the current buffer,  requesting a name.&lt;br /&gt;
&lt;br /&gt;
* C-x C-f :  Open a file.&lt;br /&gt;
&lt;br /&gt;
* C-x d :  Open a directory.&lt;br /&gt;
&lt;br /&gt;
* C-x b,  C-x C-b:  The first takes you to another buffer.  the second takes you to a list of all available buffers.&lt;br /&gt;
&lt;br /&gt;
* C-x 1, C-x 2, C-x 3 :  C-x 2 and 3 split the current window.  2 splits horizontally,  while 3 splits vertically.  C-x 1 gets rid of the various splits,  leaving you with a single window.&lt;br /&gt;
&lt;br /&gt;
* C-g :  Cancel the current command or key sequence, even if you are in a minibuffer.  A minibuffer is a one-line buffer at the bottom of the screen,  where you type in things like filenames and search expressions.  Sometimes you may have to hit C-g more than once.&lt;br /&gt;
&lt;br /&gt;
===Cutting and Pasting===&lt;br /&gt;
&lt;br /&gt;
* C-k :  Removes the portion of the line following the cursor and places it on the clipboard.  Repeat to remove more text and append it to the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-[space] :  Sets a &amp;quot;mark&amp;quot; (beginning of the current selection).&lt;br /&gt;
&lt;br /&gt;
* C-w :  Removes everything between the cursor and the &amp;quot;mark&amp;quot; and places it on the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-y : Inserts the contents of the clipboard into the buffer.&lt;br /&gt;
&lt;br /&gt;
* M-y : After pressing C-y,  use this to gain access to previous items in the clipboard.&lt;br /&gt;
&lt;br /&gt;
===Help===&lt;br /&gt;
&lt;br /&gt;
* C-h t :  This takes you to a tutorial which tries to teach you all this,  and a bunch of other stuff besides.  It's very helpful for the aspiring Emacs enthusiast.&lt;br /&gt;
&lt;br /&gt;
* C-h k :  Runs the command &amp;quot;describe-key.&amp;quot;  It prompts you for a key that you would like described,  then you perform whatever key sequence you want to know about.&lt;br /&gt;
&lt;br /&gt;
* C-h b :  Opens a list of all the commands currently bound to keys.&lt;br /&gt;
&lt;br /&gt;
* M-x doctor :  Sometimes you just have to talk out your problems with a sympathetic program.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
&lt;br /&gt;
* M-/ :  Autocompletion.  Emacs looks through the buffer for possible completions of whatever you're typing at the moment.  For example,  if you've typed &amp;quot;rotweiler&amp;quot; at some point previous,  and wish to reuse the word,  you could type rot'''M-/''' and it will fill in the &amp;quot;weiler&amp;quot;.  Of course,  it may also come up with &amp;quot;rotation&amp;quot; if it sees that word as well.  Can be very handy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''see also''&lt;br /&gt;
* [[Emacs modes]]&lt;br /&gt;
* [[Emacs customization]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Binary&amp;diff=8393</id>
		<title>Binary</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Binary&amp;diff=8393"/>
		<updated>2004-03-14T18:58:24Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Floating point section lacks detail.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Binary''' (also known as base 2) is the representation of numbers with a base--or ''radix''--of two.  Binary numbers are therefore represented with two symbols, usually written as a string of 1's and 0's e.g. 0001010011101.&lt;br /&gt;
&lt;br /&gt;
In the more familiar world of decimal counting,  there are ten values that a single symbol can represent (0-9, giving it a radix of 10).  To express higher numbers,  a &amp;quot;positional notation&amp;quot; is used.  For example,  the 1 in 21936 represents a quantity of 1 * 10^3,  or 1000.&lt;br /&gt;
&lt;br /&gt;
Binary works in much the same way,  with the position of a bit representing its magnitude.  A number like 10110 represents:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     1 * 2^4 (16)&lt;br /&gt;
   + 0 * 2^3 (8)&lt;br /&gt;
   + 1 * 2^2 (4)&lt;br /&gt;
   + 1 * 2^1 (2)&lt;br /&gt;
   + 0 * 2^0 (1)&lt;br /&gt;
&lt;br /&gt;
   16 + 4 + 2 = 20 &lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case this is unclear,  here is the same process for a decimal number 87,103:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     8 * 10^4 (10,000)&lt;br /&gt;
   + 7 * 10^3 (1000)&lt;br /&gt;
   + 1 * 10^2 (100)&lt;br /&gt;
   + 0 * 10^1 (10)&lt;br /&gt;
   + 3 * 10^0 (1)&lt;br /&gt;
&lt;br /&gt;
   80,000 + 7000 + 100 + 3 = 87,103.&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One limitation of the system as it is currently described:  There is no way to represent negative numbers.  To overcome this limitation,  it is standard practice to use the highest visible bit to represent the sign of the number.  There are four different ways to represent negative numbers:  sign-and-magnitude,  one's complement,  two's complement,  and biased notation.  Two's complement dominates the field of computing today,  because it makes it easy to perform arithmetic operations.  However,  biased notation has some very useful properties,  and makes an appearance in the discussion of floating point numbers.&lt;br /&gt;
&lt;br /&gt;
===sign and magnitude===&lt;br /&gt;
While sign-and-magnitude is a lousy way to implement a computer,  it's the easiest notation to understand.  After all,  it's the way we represent decimal numbers in daily life.  The highest bit (going from left to right) tells you which way to travel from zero.  The rest of the number is read as one would read an unsigned binary number.  For example,  0101 would translate to 5,  and 1101 would be -5.&lt;br /&gt;
&lt;br /&gt;
Notice that 0000 and 1000 both represent zero,  much as if I wrote +0 and -0 in decimal. One's complement also has two representations of zero.&lt;br /&gt;
&lt;br /&gt;
===one's complement===&lt;br /&gt;
&lt;br /&gt;
The ''complement'' of a number is the number of the same magnitude but opposite sign (the number times -1).  In one's complement,  the complement is found by simply swapping all the zeros with ones,  and vice versa.  So the complement of 01101 (13) is 10010 (-13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===two's complement===&lt;br /&gt;
In two's complement notation,  getting the complement of a number requires putting ones where the zeros are and zeros where the ones are,  and then adding 1 to the result.  The complement of 01001 (9) would be 10110 + 1,  or 10111 (-9).  While that may seem like a bit of needless complexity when compared to the one's complement,  from a computer's-eye view it amounts to a great simplification.&lt;br /&gt;
&lt;br /&gt;
Under this notation,  the highest visible bit of a number implicitly defines all the higher bits.  01001 is simply a shorthand way of saying ...00000000000001001.  For negative numbers,  10111 means ...11111111111110111.  This should be slightly confusing because,  as I mentioned earlier,  binary numbers are represented in positional notation.  The question is,  what can an infinite string of 1's represent?&lt;br /&gt;
&lt;br /&gt;
For a negative number,  the positional notation works as follows:  The highest bit represents -1 * 2^(position).  Each subsequent bit represents 1 * 2^(position).  Here's the breakdown for 111 (-1),  and for 111111 (-1).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
   -1 * 2^2 (-4)&lt;br /&gt;
  + 1 * 2^1 (2)&lt;br /&gt;
  + 1 * 2^1 (1)&lt;br /&gt;
&lt;br /&gt;
  -4 + 2 + 1 = -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   -1 * 2^5 (-32)&lt;br /&gt;
  + 1 * 2^4 (16)&lt;br /&gt;
  + 1 * 2^3 (8)&lt;br /&gt;
  + 1 * 2^2 (4)&lt;br /&gt;
  + 1 * 2^1 (2)&lt;br /&gt;
  + 1 * 2^1 (1)&lt;br /&gt;
&lt;br /&gt;
  -32 + 16 + 8 + 4 + 2 + 1 = -1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adding and subtracting is fairly straightforward in two's complement.  For addition,  simply use the grade school algorithm of adding the bits in a position,  and carrying the overflow to the next higher position:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        1 11    &amp;lt;-- carry&lt;br /&gt;
     01001001 (73)&lt;br /&gt;
   + 00101011 (43)&lt;br /&gt;
   ----------&lt;br /&gt;
     01110100 (116)&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Subtraction simply requires taking the first number and adding it to the twos complement of the second.  &amp;lt;tt&amp;gt;0101 - 0110 (5 - 6)&amp;lt;/tt&amp;gt; would be the same as &amp;lt;tt&amp;gt;5 + (-6)&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
   Two's complement of 0110:&lt;br /&gt;
&lt;br /&gt;
       1   &amp;lt;--carry&lt;br /&gt;
     1001&lt;br /&gt;
   +    1&lt;br /&gt;
   ------&lt;br /&gt;
     1010&lt;br /&gt;
&lt;br /&gt;
     0101 (5)&lt;br /&gt;
   + 1010 (-6)&lt;br /&gt;
   ------&lt;br /&gt;
     1111 (-1)&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is very similar to the method by which modern processors perform the same operations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===biased notation===&lt;br /&gt;
In biased notation,  a string of zeros represents the smallest possible number the system can express,  while 1111 represents the largest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the consequences you may have noticed is that the same string of bits can represent several different numbers,  depending on whether the number is interpreted as an unsigned, ones complement, or twos-complement number.  There is yet another interpretation of a given series:  as a floating point number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===floating point===&lt;br /&gt;
Floating point math on computers has a long and painful history of conflicting representations and implementations.  Today sanity reigns,  after the industry converged on a single standard called [http://en.wikipedia.org/wiki/IEEE_754 IEEE754].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Colloquially, a '''binary''' is a compiled computer program. They are referred to as such, because they are represented in a form that a computer (which speaks binary [[machine code]]) understands, rather than [[source]], which a human does.&lt;br /&gt;
&lt;br /&gt;
See also [[unary]], [[octal]] (base 8), [[decimal]](base 10), and [[hexadecimal]](base 16)&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Binary&amp;diff=4576</id>
		<title>Binary</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Binary&amp;diff=4576"/>
		<updated>2004-03-14T17:48:14Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Saving.  Still much to be done.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Binary''' (also known as base 2) is the representation of numbers with a base--or ''radix''--of two.  Binary numbers then, are represented with two symbols, usually written as a string of 1's and 0's e.g. 0001010011101.&lt;br /&gt;
&lt;br /&gt;
In the more familiar world of decimal counting,  there are ten values that a single symbol can represent (0-9, giving it a radix of 10).  To express higher numbers,  a &amp;quot;positional notation&amp;quot; is used.  For example,  the 1 in 21936 represents a quantity of 1 * 10^3,  or 1000.&lt;br /&gt;
&lt;br /&gt;
Binary works in much the same way,  with the position of a bit representing its magnitude.  A number like 10110 represents:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     1 * 2^4 (16)&lt;br /&gt;
   + 0 * 2^3 (8)&lt;br /&gt;
   + 1 * 2^2 (4)&lt;br /&gt;
   + 1 * 2^1 (2)&lt;br /&gt;
   + 0 * 2^0 (1)&lt;br /&gt;
&lt;br /&gt;
   16 + 4 + 2 = 20 &lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case this is unclear,  here is the same process for a decimal number 87,103:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     8 * 10^4 (10,000)&lt;br /&gt;
   + 7 * 10^3 (1000)&lt;br /&gt;
   + 1 * 10^2 (100)&lt;br /&gt;
   + 0 * 10^1 (10)&lt;br /&gt;
   + 3 * 10^0 (1)&lt;br /&gt;
&lt;br /&gt;
   80,000 + 7000 + 100 + 3 = 87,103.&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One limitation of the system as it is currently described:  There is no way to represent negative numbers.  To overcome this limitation,  it is standard practice to use the highest visible bit to represent the sign of the number.  There are four different ways to represent negative numbers:  sign-and-magnitude,  one's complement,  two's complement,  and biased notation.  Two's complement dominates the field of computing today,  because it makes it easy to perform arithmetic operations.  However,  biased notation has some very useful properties,  and makes an appearance in the discussion of floating point numbers.&lt;br /&gt;
&lt;br /&gt;
===sign and magnitude===&lt;br /&gt;
While sign-and-magnitude is a lousy way to implement a computer,  it's the easiest notation to understand.  After all,  it's the way we represent decimal numbers in daily life.  The highest bit (going from left to right) tells you which way to travel from zero.  The rest of the number is read as one would read an unsigned binary number.  For example,  0101 would translate to 5,  and 1101 would be -5.&lt;br /&gt;
&lt;br /&gt;
Notice that 0000 and 1000 both represent zero,  much as if I wrote +0 and -0 in decimal. One's complement also has two representations of zero.&lt;br /&gt;
&lt;br /&gt;
===one's complement===&lt;br /&gt;
&lt;br /&gt;
The ''complement'' of a number is the number of the same magnitude but opposite sign (the number times -1).  In one's complement,  the complement is found by simply swapping all the zeros with ones,  and vice versa.  So the complement of 01101 (13) is 10010 (-13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===two's complement===&lt;br /&gt;
In two's complement notation,  getting the complement of a number requires putting ones where the zeros are and zeros where the ones are,  and then adding 1 to the result.  The complement of 01001 (9) would be 10110 + 1,  or 10111 (-9).  While that may seem like a bit of needless complexity when compared to the one's complement,  from a computer's-eye view it amounts to a great simplification.&lt;br /&gt;
&lt;br /&gt;
Under this notation,  the highest visible bit of a number implicitly defines all the higher bits.  01001 is simply a shorthand way of saying ...00000000000001001.  For negative numbers,  10111 means ...11111111111110111.  This should be slightly confusing because,  as I mentioned earlier,  binary numbers are represented in positional notation.  The question is,  what can an infinite string of 1's represent?&lt;br /&gt;
&lt;br /&gt;
For a negative number,  the positional notation works as follows:  The highest bit represents -1 * 2^(position).  Each subsequent bit represents 1 * 2^(position).  Here's the breakdown for 111 (-1),  and for 111111 (-1).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===biased notation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the consequences you may have noticed is that the same string of bits can represent several different numbers,  depending on whether the number is interpreted as an unsigned, ones complement, or twos-complement number.  There is yet another interpretation of a given series:  as a floating point number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===floating point===&lt;br /&gt;
Floating point math on computers has a long and painful history of conflicting representations and implementations.  Today sanity reigns,  after the industry converged on a single standard called [http://cch.loria.fr/documentation/IEEE754/ IEEE754].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Colloquially, a '''binary''' is a compiled computer program. They are referred to as such, because they are represented in a form that a computer (which speaks binary [[machine code]]) understands, rather than [[source]], which a human does.&lt;br /&gt;
&lt;br /&gt;
See also [[unary]], [[octal]] (base 8), [[decimal]](base 10), and [[hexadecimal]](base 16)&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Talk:C_plus_plus_tutorial&amp;diff=23140</id>
		<title>Talk:C plus plus tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Talk:C_plus_plus_tutorial&amp;diff=23140"/>
		<updated>2004-03-14T16:07:12Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Some questions about style.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm trying to get this page together,  but I have a couple of questions.&lt;br /&gt;
&lt;br /&gt;
Question the first:  Is there a GPL/Creative Commons tutorial that I could modify to speed this process along?&lt;br /&gt;
&lt;br /&gt;
Question the second:  What is the traditional format for breaking up a page like this into multiple,  related pages.  Would they be labelled C_plus_plus_tutorial_[1|2|3]?  Or C_plus_plus_tutorial_[intro|simple|vars]?  &lt;br /&gt;
&lt;br /&gt;
Question the third:  Is there a better place to ask these questions?&lt;br /&gt;
&lt;br /&gt;
[[User:Chalupamaster92|Chalupamaster92]] 11:07, Mar 14, 2004 (EST)&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=9737</id>
		<title>Machine code</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=9737"/>
		<updated>2004-03-14T15:43:04Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Link-making and other tweaks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Machine Code''',  sometimes called ''binary code'', is simply a set of instructions and data that directly control the actions of a [[CPU]].  A collection of machine code used to accomplish some useful task (or play ''Counterstrike'') is called a ''program''.&lt;br /&gt;
&lt;br /&gt;
Not every CPU can read every program.  Whether a [[processor|microprocessor]] can read a given program depends on its ''instruction set architecture'' (ISA),  which defines the form that individual instructions to a given chip have to take.  For example,  Intel has its x86 instruction set,  while others (such as SGI's R-series microprocessors) are based on the [[MIPS]] instruction set.  &lt;br /&gt;
&lt;br /&gt;
There exist entire families of chips with the same instruction set,  so a program compiled for the x86 architecture will run happily on a [[Pentium]] IV,  a Cyrix x86, or an AMD Athlon.  Even within a single manufacturer's product line,  there can be wide variations in clock speed,  cache size,  or pipeline size,  without harming compatability.&lt;br /&gt;
&lt;br /&gt;
An instruction set represents all the discrete operations that can be performed by a processor,  including fundamental operations like adding and subtracting integer and floating point numbers,  loading data from and storing it back to [[memory]],  multiplying and dividing,  testing conditions (for example,  does [[variable]] x = 5?) and branching the program based on the results.  Some chips also include more specialized operations (for example,  early Pentiums contained &amp;quot;MMX instructions&amp;quot; which were intended to speed up multimedia).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The Life of a Program===&lt;br /&gt;
&lt;br /&gt;
Most programs start their lives as a collection of [[source code]];  human-readable files that define how a program should operate.  There are literally hundreds of [[programming languages]] to choose from.&lt;br /&gt;
&lt;br /&gt;
Before a program is compiled into machine code,  it may first be translated into [[object code]],  which is basically machine code with certain symbols (calls to [[Library-related Commands and Files|libraries]] for example) left undefined.  It is up to a separate program called the [[linker]] to resolve the unknown symbols so that the program can use them.&lt;br /&gt;
&lt;br /&gt;
Once a program has been compiled and linked,  it can be stored in an executable format (common Unix formats include [[a.out]] and [[ELF]]) on the [[hard drive]].  Now the program can be loaded into memory and run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:  Some programming languages (notably [[Java]] and Microsoft's .NET) compile into bytecode rather than machine code.  Instead of targeting a specific type of hardware,  the compiler will translate programs into instructions that can be read by a software-based [[virtual machine]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=4553</id>
		<title>Machine code</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=4553"/>
		<updated>2004-03-14T15:18:58Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: COFF isn't a Unix executable format,  and I isn't too bright.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Machine Code''',  sometimes called ''binary code'', is simply a set of instructions and data that directly control the actions of a [[CPU]].  A collection of machine code used to accomplish some task (or play ''Counterstrike'') is called a ''program''.&lt;br /&gt;
&lt;br /&gt;
Not every CPU can read every program.  Whether a microprocessor can read a given program depends on its ''instruction set architecture'' (ISA),  which defines the form that individual instructions to a given chip have to take.  For example,  Intel has its x86 instruction set,  while others (such as SGI's R-series microprocessors) are based on the MIPS instruction set.  &lt;br /&gt;
&lt;br /&gt;
There exist entire families of chips with the same instruction set,  so a program compiled for the x86 architecture will run happily on a Pentium IV,  a Cyrix x86, or an AMD Athlon.  Even within a single manufacturer's product line,  there can be wide variations in clock speed,  cache size,  or pipeline size,  without harming compatability.&lt;br /&gt;
&lt;br /&gt;
An instruction set represents all the discrete operations that can be performed by a processor,  including fundamental operations like adding and subtracting integer and floating point numbers,  loading data from memory and storing it back,  multiplying and dividing,  testing conditions (for example,  does variable x = 5?) and branching the program based on the results.  Some chips also include more specialized operations (for example,  early Pentiums contained &amp;quot;MMX instructions&amp;quot; which were intended to speed up multimedia).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The Life of a Program===&lt;br /&gt;
&lt;br /&gt;
Most programs start their lives as a collection of [[source code]];  human-readable files that define how a program should operate.  There are literally hundreds of [[programming languages]] to choose from.&lt;br /&gt;
&lt;br /&gt;
Before a program is compiled into machine code,  it may first be translated into [[object code]],  which is basically machine code with certain symbols (calls to [[library|libraries]] for example) left undefined.  It is up to a separate program called the [[linker]] to resolve the unknown symbols so that the program can use them.&lt;br /&gt;
&lt;br /&gt;
Once a program has been compiled and linked,  it can be stored in an executable format (common Unix formats include a.out and ELF) on the hard drive.  Now the program can be loaded into memory and run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:  Some programming languages (notably Java and Microsoft's .NET) compile into bytecode rather than machine code.  Instead of targeting a specific type of hardware,  the compiler will translate programs into instructions that can be read by a software-based [[virtual machine]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Talk:Machine_code&amp;diff=23139</id>
		<title>Talk:Machine code</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Talk:Machine_code&amp;diff=23139"/>
		<updated>2004-03-14T15:13:14Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm glossing over a whole lot of detail in this article,  especially when it comes to the compiling process.  Feel free to dig in.&lt;br /&gt;
&lt;br /&gt;
[[User:Chalupamaster92|Chalupamaster92]] 10:13, Mar 14, 2004 (EST)&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=4552</id>
		<title>Machine code</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Machine_code&amp;diff=4552"/>
		<updated>2004-03-14T15:11:14Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Destubbification,  rough draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Machine Code''',  sometimes called ''binary code'', is simply a set of instructions and data that directly control the actions of a [[CPU]].  A collection of machine code used to accomplish some task (or play ''Counterstrike'') is called a ''program''.&lt;br /&gt;
&lt;br /&gt;
Not every CPU can read every program.  Whether a microprocessor can read a given program depends on its ''instruction set architecture'' (ISA),  which defines the form that individual instructions to a given chip have to take.  For example,  Intel has its x86 instruction set,  while others (such as SGI's R-series microprocessors) are based on the MIPS instruction set.  &lt;br /&gt;
&lt;br /&gt;
There exist entire families of chips with the same instruction set,  so a program compiled for the x86 architecture will run happily on a Pentium IV,  a Cyrix x86, or an AMD Athlon.  Even within a single manufacturer's product line,  there can be wide variations in clock speed,  cache size,  or pipeline size,  without harming compatability.&lt;br /&gt;
&lt;br /&gt;
An instruction set represents all the discrete operations that can be performed by a processor,  including fundamental operations like adding and subtracting integer and floating point numbers,  loading data from memory and storing it back,  multiplying and dividing,  testing conditions (for example,  does variable x = 5?) and branching the program based on the results.  Some chips also include more specialized operations (for example,  early Pentiums contained &amp;quot;MMX instructions&amp;quot; which were intended to speed up multimedia).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The Life of a Program===&lt;br /&gt;
&lt;br /&gt;
Most programs start their lives as a collection of [[source code]];  human-readable files that define how a program should operate.  There are literally hundreds of [[programming languages]] to choose from.&lt;br /&gt;
&lt;br /&gt;
Before a program is compiled into machine code,  it may first be translated into [[object code]],  which is basically machine code with certain symbols (calls to [[library|libraries]] for example) left undefined.  It is up to a separate program called the [[linker]] to resolve the unknown symbols so that the program can use them.&lt;br /&gt;
&lt;br /&gt;
Once a program has been compiled and linked,  it can be stored in an executable format (common Unix formats include COFF and ELF) on the hard drive.  Now the program can be loaded into memory and run.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note:  Some programming languages (notably Java and Microsoft's .NET) compile into bytecode rather than machine code.  Instead of targeting a specific type of hardware,  the compiler will translate programs into instructions that can be read by a software-based [[virtual machine]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Unicode&amp;diff=9568</id>
		<title>Unicode</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Unicode&amp;diff=9568"/>
		<updated>2004-03-11T14:26:00Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: The entire article was about the Unicode Consortium. :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===What is unicode?===&lt;br /&gt;
'''Unicode''' is a system for representing characters and symbols in binary[1].  To that extent,  it is similar to other encoding schemes like [[ASCII]].  However,  the goal of Unicode is to be able to uniquely represent every character in every language.  Use of Unicode promotes easy internationalization of files and applications.&lt;br /&gt;
&lt;br /&gt;
Unicode encoding schemes include UTF-8, UTF-16, UTF-32.  These use 8, 16, and 32 bits to represent a character,  respectively.&lt;br /&gt;
&lt;br /&gt;
==What is the Unicode Consortium?==&lt;br /&gt;
''From the unicode website:'' The Unicode Consortium is a non-profit organization founded to develop, extend and promote use of the Unicode Standard, which specifies the representation of text in modern software products and standards. The membership of the consortium represents a broad spectrum of corporations and organizations in the computer and information processing industry. The consortium is supported financially solely through membership dues. Membership in the Unicode Consortium is open to organizations and individuals anywhere in the world who support the Unicode Standard and wish to assist in its extension and implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External Link==&lt;br /&gt;
* [http://www.unicode.org/ Unicode.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[1] Just to be absolutely clear,  Unicode is not a set of fonts,  nor is it a software package.  It's simply a way of representing a given character as a string of 1's and 0's.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Mkisofs&amp;diff=9985</id>
		<title>Mkisofs</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Mkisofs&amp;diff=9985"/>
		<updated>2004-03-11T13:49:30Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''mkisofs''' - A utility for creating hybrid ISO9660/Joliet/HFS filesystems,  including optional Rock Ridge extensions.  &lt;br /&gt;
&lt;br /&gt;
*ISO9660: A format for storing data about the files on a volume (file system).  It's a &amp;quot;lowest common denominator&amp;quot; that most operating systems will understand.  This is the format used by CD image files,  sometimes called ISO's.&lt;br /&gt;
&lt;br /&gt;
*Joliet:  an extension to the ISO9660 format which allows for long filenames and filenames in [[unicode]].&lt;br /&gt;
&lt;br /&gt;
*Rock Ridge: an extension to the ISO9660 format,  which allows the CD to store long filenames,  UNIX permissions,  and symbolic links].  &lt;br /&gt;
&lt;br /&gt;
*HFS (Heirarchal File System):  a third extension,  which supports file information useful to [[Macintosh]] computers.&lt;br /&gt;
&lt;br /&gt;
mkisofs is useful for CD and DVD writing,  but it cannot perform the write itself.  Instead,  it takes a directory structure and converts it into a binary file which corresponds to the information which would be on the CD.  This file can be used by CD mastering software such as [[cdrecord]].  &lt;br /&gt;
&lt;br /&gt;
mkisofs can be used to create bootable CDs.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Internet_Relay_Chat&amp;diff=4010</id>
		<title>Internet Relay Chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Internet_Relay_Chat&amp;diff=4010"/>
		<updated>2004-03-11T07:17:41Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''IRC''': ''Internet Relay Chat'' - one of the older widespread messaging protocols; similar to the popular IM networks, but ordinarily used for chat rooms rather than [[instant messaging]]. Servers are distributed and can be run by anyone, so IRC is a very free place. It houses help channels for almost all major [[Linux]] distributions, as well as rooms devoted to just about every topic imaginable. Channels have &amp;quot;operators&amp;quot; who can kick or mute anyone in the room. It also features the ability to send files. Like any large community, it does have its seedier regions, so be wary when venturing forth. (i.e. SexNet is probably not a good starting place for the easily offended.)&lt;br /&gt;
&lt;br /&gt;
Some regions of IRC are even battlegrounds, as people try to take over channels from each other.  The battles are fought by disabling the systems of the people who currently control a channel. &lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
*[[IRC Tutorial|Using IRC]]&lt;br /&gt;
*[[Getting help from IRC]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Getting_help_from_IRC&amp;diff=4011</id>
		<title>Getting help from IRC</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Getting_help_from_IRC&amp;diff=4011"/>
		<updated>2004-03-11T07:16:45Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most major distributions will have a user-supported channel on the IRC network FreeNode (Formerly OpenProjects).  in order to connect to an IRC network you will need an [[IRC Client]].&lt;br /&gt;
----&lt;br /&gt;
Here are some of the channels for some of the more major distributions (in alphabetical order):&lt;br /&gt;
&lt;br /&gt;
* '''[[Debian]]''' - #Debian&lt;br /&gt;
* '''[[Fedora]]''' - #fedora&lt;br /&gt;
* '''[[Gentoo]]''' - #Gentoo&lt;br /&gt;
* '''[[Mandrake]]''' - #Mandrake&lt;br /&gt;
* '''[[Slackware]]''' - #slackware&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
For help getting started with IRC,  go to the [[IRC tutorial]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Free&amp;diff=4760</id>
		<title>Free</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Free&amp;diff=4760"/>
		<updated>2004-03-11T06:52:28Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Random pontification with much linking&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The concept of &amp;quot;freedom&amp;quot;, as it applies to software, is complicated because of the multiple uses of &amp;quot;free&amp;quot; in the English language.  Some have proposed the term &amp;quot;libre software&amp;quot; to eradicate potential confusion; as of this writing, this term has not caught on widely.&lt;br /&gt;
&lt;br /&gt;
The [[FSF]] (or Free Software Foundation) clearly explains their position here: [http://www.fsf.org/philosophy/free-sw.html]&lt;br /&gt;
&lt;br /&gt;
Note that, politically, ''free software'' and ''open-source software'' are two separate movements, with separate but frequently overlapping goals.  &amp;quot;Free Software&amp;quot; focuses on the political and ethical ramifications of keeping software free.  &amp;quot;Open Source&amp;quot; tends to focus on more the more pragmatic advantages that come with open source,  such as code quality and lower development costs.  Individual software packages are often referred to using either term,  and the distinctiveness of the two approaches is further blurred by the increasing use of the term '''FOSS''',  or 'Free, Open-Source Software'.&lt;br /&gt;
&lt;br /&gt;
There are two different meanings of &amp;quot;free&amp;quot; when referring to software:  available at no cost,  or freely modifiable under a non-restrictive license.  The analogy commonly used to illustrate the distinction is by comparing &amp;quot;free beer&amp;quot; to &amp;quot;free speech.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The [[Open Source Initiative]] maintains a list of dozens licenses which are considered compatible with the goals of the Open Source movement,  including the [[GPL]] and [[LGPL]],  [[BSD license|BSD]],  [[Apache]],  [[Mozilla MPL|Mozilla]], and [[SISSL]] licenses.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Integrated_development_environment&amp;diff=4368</id>
		<title>Integrated development environment</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Integrated_development_environment&amp;diff=4368"/>
		<updated>2004-03-11T06:36:17Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What are good Linux IDE's? What features do they have? How easy are they to use? Is the Documentation any good? Are there any Dreamweaver alternatives?&lt;br /&gt;
&lt;br /&gt;
Integrated Development Environment:&lt;br /&gt;
* [[DevCpp|Dev-C++]]&lt;br /&gt;
* [[Glimmer]]&lt;br /&gt;
* [[KDevelop]]&lt;br /&gt;
&lt;br /&gt;
Web Design Environment:&lt;br /&gt;
* [[Bluefish]]&lt;br /&gt;
* [[Nvu]] / [[Mozilla Composer]]&lt;br /&gt;
* [[Quanta]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Nice&amp;diff=6639</id>
		<title>Nice</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Nice&amp;diff=6639"/>
		<updated>2004-03-11T06:34:36Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Let the niceness begin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''nice''' is a utility that reports or sets the priority of a command,  giving the user control over how much processor time is allotted for running a given task.  The &amp;quot;niceness&amp;quot; of a program is a number between -20 and 19.  The higher the number,  the more willing a task is to step aside and let other tasks monopolize the processor.  That's why it's called &amp;quot;niceness&amp;quot; instead of &amp;quot;greediness.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nice is used when a command is first run.  For example,  &amp;lt;tt&amp;gt;nice -n 19 setiathome&amp;lt;/tt&amp;gt; would run setiathome with the lowest possible priority.  Privileges are required to run a command with negative priority.  To change the priority of a currently running process,  use [[renice]].&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Ln&amp;diff=4006</id>
		<title>Ln</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Ln&amp;diff=4006"/>
		<updated>2004-03-11T06:02:24Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;tt&amp;gt;ln&amp;lt;/tt&amp;gt; - creates a link from one file to another.&lt;br /&gt;
&lt;br /&gt;
Links are divided into two classes, hard and symbolic.  Symbolic links (symlinks) are often preferred due to their flexibility and the ability to work across different partitions.&lt;br /&gt;
&lt;br /&gt;
Given a file, it is non-trivial to locate other files linked to it.  Symbolic links can be found by searching the entire filesystem for symbolic links pointing to that file, while hard links can only be found by searching every inode at a low level for inodes that share the same data pointers as that file.&lt;br /&gt;
&lt;br /&gt;
==Hard==&lt;br /&gt;
&lt;br /&gt;
Hard links are more &amp;quot;robust&amp;quot; than symbolic links in that the links are actually connected, and renaming or deleting one of the files does not break the link between them.  However, as the files are actually connected at the inode level in Linux, hard links cannot cross partitions.  In addition, directories cannot be hard linked, except for the special links &amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;..&amp;lt;/tt&amp;gt; which refer to itself and the parent directory respectively.  Also unlike symbolic links, hard links can never be dangling, and each hard link can have different access permissions and ownership.&lt;br /&gt;
&lt;br /&gt;
With hard links, a link counter is maintained on each file.  When the link counter drops to zero, the file is deleted.  This way, once you hard link a file, you can delete either &amp;quot;copy&amp;quot; of the file, and the other will still be valid.  Normally, files only have a single link.  Directories have as many links as they have subdirectories (including &amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;..&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Creating===&lt;br /&gt;
Hard links are created with&lt;br /&gt;
&amp;lt;tt&amp;gt;ln &amp;lt;i&amp;gt;source&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
Where &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;source&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is an existing file, and &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is the file to create.  &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is optional.  If it is not given, the filename given in &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;source&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is used.  If &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is an existing directory, it will create the new link there.&lt;br /&gt;
&lt;br /&gt;
===Finding===&lt;br /&gt;
Locating a hard link is a bit harder than a symbolic link.  In &amp;lt;tt&amp;gt;[[ls]] -l&amp;lt;/tt&amp;gt;, the number following the permissions but before the owner is the number of links to that file.  For normal files, if that number is greater than 1, then that file is hardlinked somewhere else as well as where you are looking now:&lt;br /&gt;
&amp;lt;tt&amp;gt;lrwxrwxrwx   &amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;  username groupname  # 2004-03-08 15:55  foo&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also find hardlinked files with &amp;lt;tt&amp;gt;[[find]] -type f -links 2&amp;lt;/tt&amp;gt;.  You will have to repeat the search for 3, 4, etc. number of links.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==Symbolic==&lt;br /&gt;
&lt;br /&gt;
Symbolic links are implemented in Linux as an inode containing the &amp;quot;real&amp;quot; location of the file.  Symbolic links use a path that can be either absolute (beginning with /) or relative to the location of the link.&lt;br /&gt;
&lt;br /&gt;
Because of their design, a symbolic link can point to any directory or file, or even not point at an existing location (in which case it is called &amp;quot;dangling&amp;quot; or &amp;quot;broken&amp;quot;).  A program called &amp;lt;tt&amp;gt;symlinks&amp;lt;/tt&amp;gt; was written to make the process of locating and cleaning up broken [[symlink]]s.  Unlike a hard link, deleting the original file will cause the file to be erased and the symlinks pointing to it to become dangling.&lt;br /&gt;
&lt;br /&gt;
Symbolic links have no permissions or status of their own.  Instead, they use the permissions of the file they point to.  The size of a symlink is reported as the length of the path they contain (plus the [[null]] character at the end)&lt;br /&gt;
&lt;br /&gt;
===Creating===&lt;br /&gt;
Symbolic Links are created with the &amp;lt;tt&amp;gt;-s&amp;lt;/tt&amp;gt; flag to &amp;lt;tt&amp;gt;ln&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;ln -s &amp;lt;i&amp;gt;content&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
Where &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;content&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is the &amp;quot;text&amp;quot; of the symlink, and &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is the actual file which will be created.  &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;content&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; can be any string, even one that does not point to a file (in which case, the symlink will dangle), and it will be used &amp;lt;b&amp;gt;exactly&amp;lt;/b&amp;gt; as given.  This means that &amp;lt;tt&amp;gt;ln -s sbin/executable bin/executable&amp;lt;/tt&amp;gt; will &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; create a link from bin/executable to sbin/executable, instead, bin/executable will point to bin/sbin/executable.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;link&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt; is optional.  If you do not give a name here, it will assume you want the link to be named the same as the file in &amp;lt;tt&amp;gt;&amp;lt;i&amp;gt;content&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.  If you provide an existing directory name with no filename, it will create the link in that directory.&lt;br /&gt;
&lt;br /&gt;
===Finding===&lt;br /&gt;
Using &amp;lt;tt&amp;gt;[[ls]] -l&amp;lt;/tt&amp;gt; to locate symbolic links is easy.  They are shown as&lt;br /&gt;
&amp;lt;tt&amp;gt;lrwxrwxrwx   1  username groupname  # 2004-03-08 15:55  &amp;lt;b&amp;gt;foo -&amp;gt; bar&amp;lt;/b&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
This indicates that anytime I access &amp;lt;tt&amp;gt;foo&amp;lt;/tt&amp;gt;, I am really accessing the file named &amp;lt;tt&amp;gt;bar&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Symbolic links can also be located using &amp;lt;tt&amp;gt;[[find]] -type l&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Symbolic_link&amp;diff=4005</id>
		<title>Symbolic link</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Symbolic_link&amp;diff=4005"/>
		<updated>2004-03-11T05:55:47Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: I admire the recursiveness of what I'm doing.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[symlink]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Symlinks&amp;diff=5267</id>
		<title>Symlinks</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Symlinks&amp;diff=5267"/>
		<updated>2004-03-11T05:52:10Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: May as well save the reader a click&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[symlink]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3217</id>
		<title>C/C plus plus tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3217"/>
		<updated>2004-03-08T03:00:28Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Fixed link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comments:  Early and often==&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
===Let the Compiler Nitpick===&lt;br /&gt;
When compiling with GCC or G++, always use the &amp;quot;-Wall&amp;quot; command-line argument to tell GCC/G++ to print extra warnings and errors. This can often help you locate potential problems in your code.  But it's not enough to let the compiler spit the nitpicks at you;  you have to take them seriously.  Warnings are often a sign that your code is doing something it shouldn't.  [Examples?]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Remote Debugging with DDD and gdb===&lt;br /&gt;
&lt;br /&gt;
1. Make sure gdbsever and libthread_db.so.1 on the remote machine.&lt;br /&gt;
&lt;br /&gt;
2. run gdbserver on target:&lt;br /&gt;
gdbserver host:2345 /path/application&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;host&amp;quot; is ignored, so this can be anything. 2345 is an arbitrary TCP&lt;br /&gt;
port not in use.  2345 ususally works, just make sure it does not conflict with other IP ports in use.&lt;br /&gt;
&lt;br /&gt;
The target application on the remote machine does not require symbols (debugging information).&lt;br /&gt;
&lt;br /&gt;
3. On the host (your local PC):&lt;br /&gt;
a. ddd program (must have symbols)&lt;br /&gt;
b. At the (gdb) prompt&lt;br /&gt;
    target remote xxx.xxx.xxx.xxx:2345 &lt;br /&gt;
&lt;br /&gt;
Where the IP address is that of the remote machine.&lt;br /&gt;
&lt;br /&gt;
That's it, remote debugging is up and running.&lt;br /&gt;
&lt;br /&gt;
==Optimization==&lt;br /&gt;
&lt;br /&gt;
Optimizing a program is often more an art than a science.  But even in art,  there are some rules that should be carefully followed (especially for new practitioners who aren't quite sure why the rules are important).&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #1 : DON'T!===&lt;br /&gt;
You're coding along,  minding your own business,  when you notice a simple,  quick optimization just begging to be done.  Maybe it's as simple as replacing &amp;lt;tt&amp;gt;d = c * 2;&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;d = c &amp;lt;&amp;lt; 1;&amp;lt;/tt&amp;gt;.  Why do an expensive multiply when you could do a cheap right-shift and come up with precisely the same result?&lt;br /&gt;
&lt;br /&gt;
Why indeed?  This optimization should do the right thing,  but at the expense of a tiny bit of program clarity.  Program clarity is a precious commodity,  which isn't something that can be said for your computer's processor time.  It may be that you'll end up making precisely this optimization later on.  But right now,  the important thing is to get the program working correctly.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #2 : DON'T!===&lt;br /&gt;
So now the program runs.  It runs like a fifteen year old weiner dog.  Sometimes it sits down on its haunches,  staring off into space as though it's waiting for a doggie treat.  So it's time to go in and replace that multiply with the bitshift,  right?&lt;br /&gt;
&lt;br /&gt;
Patience,  grasshopper.&lt;br /&gt;
&lt;br /&gt;
Before you decide if it's worth investing even one second in optimizing the program,  decide how valuable your effort is going to be.  The value derived from the effort is directly linked to the purpose of the program.  Is it a tiny app you wrote for your own personal use,  that you'll only use once a week?  Is it part of a critical,  high-performance application or library that will be used by millions,  or a scientific number-cruncher which will take years to solve a problem?  Most likely,  it will be somewhere between these two extrema.  To some extent,  &amp;quot;fast enough&amp;quot; is a subjective judgment.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #3 : DON'T!===&lt;br /&gt;
Okay,  I see you're getting impatient.  You want to go in and make that aged dachshund run like a young rotweiler chasing a mailman smothered in barbecue sauce.  But the bad news is,  it's still not time to replace that line of code.  If you go back in and start &amp;quot;optimizing&amp;quot; right now,  you may end up with hundreds of little tweaks,  whose overall effect is to make the code difficult to understand and impossible to maintain.  Even worse,  it may not speed your program up noticeably.&lt;br /&gt;
&lt;br /&gt;
Before you make a single change,  take advantage of a profiler ([[gprof]] ([http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html tutorial]), for example).  A profiler will tell you exactly where your code is spending all its time.  The rationale for this is referred to as [http://en.wikipedia.org/wiki/Amdahls_law Amdahl's law] :  The amount of time saved by optimizing a section of code cannot be greater than the time the program spent running that code.  For example,  if a single for loop comprises 7% of a program's running time,  then no optimization you could perform on that loop will cause more than a 7% performance increase.&lt;br /&gt;
&lt;br /&gt;
Most programs spend most of their time executing a few very small areas of code.  Find out which areas,  and you'll likely get huge boosts from small changes.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #4 : Never Assume an Optimization Works===&lt;br /&gt;
It is important that you know exactly how the unoptimized version of your program was performing,  because many optimizations don't do anything.  Some &amp;quot;optimizations&amp;quot; will even slow your program.&lt;br /&gt;
&lt;br /&gt;
Part of this is due to the fact that,  without being told,  the compiler will try to do whatever optimizations it considers &amp;quot;safe&amp;quot;,  and a programmer's attempts to optimize the code may interfere with the optimizations the compiler is trying to perform.  The best thing is to perform one optimization,  compare the new performance to the old performance,  decide whether to keep it,  and then move on to the next potential improvement.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #5 : Three Words: Algorithms===&lt;br /&gt;
Very frequently,  the best way to speed up a program is to change the way you solve the problem.  No amount of pointer arithmetic or loop unwinding is going to give you a thousand-fold improvement in runtime,  but changing the algorithm frequently does just that.  [Need details, specifics] &lt;br /&gt;
&lt;br /&gt;
[That's really 90% of optimization (sans details),  but there are also things to cover like pre-caching,  just-in-time calculation,  optimizing for space vs. optimizing for time,  etc.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Save Compiler Optimizations for the End===&lt;br /&gt;
Also, don't use any -O flags when debugging, it can compound current errors and make things really weird. They can possibly add new bugs too, due to the way the compiler does low-level optimization.  The higher the optimization level,  the riskier the optimizations that the compiler will attempt.&lt;br /&gt;
&lt;br /&gt;
Once you know the program works in an unoptimized state,  then it may be time to crank the -O flag up a couple of notches.  Compare both performance and stability between the unoptimized and optimized versions.&lt;br /&gt;
&lt;br /&gt;
==Memory management==&lt;br /&gt;
===Valgrind===&lt;br /&gt;
Many new programmers have difficulties with pointers and sudden segmentation faults due to careless usage. [http://valgrind.kde.org/ Valgrind] is an excellent program to get more information about what is causing the problems.&lt;br /&gt;
&lt;br /&gt;
===new and malloc:  Arch-nemises===&lt;br /&gt;
Don't mix malloc and new; they might work togeather temporarily, but they're bound to cause errors. Pick which one from the start and stay with it. Valgrind will also point out this kind of error.  &lt;br /&gt;
&lt;br /&gt;
''Note: The same can be said for &amp;lt;iostream&amp;gt; and &amp;lt;iostream.h&amp;gt;.  Don't play mix and match.''&lt;br /&gt;
&lt;br /&gt;
==Use Macros With Care==&lt;br /&gt;
Macros are simply precompiler directives that instruct the compiler to replace certain strings of text with others before it attempts to compile.  If used carelessly,  they can make a program terribly confusing.&lt;br /&gt;
&lt;br /&gt;
For example,  if you wanted to be intentionally misleading,  you could write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; #define CLOSE_BLOCK {&lt;br /&gt;
 #define OPEN_BLOCK }&lt;br /&gt;
 #define CIN cout&lt;br /&gt;
 #define COUT cin&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then write the rest of the program as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; for( int i = 0; i &amp;lt; 100; ++i )&lt;br /&gt;
 CLOSE_BLOCK&lt;br /&gt;
    for( int j = 0; j &amp;lt; 100; ++j )&lt;br /&gt;
    CLOSE_BLOCK&lt;br /&gt;
       CIN &amp;lt;&amp;lt; data[ i ][ j ];&lt;br /&gt;
    OPEN_BLOCK&lt;br /&gt;
 OPEN_BLOCK&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But intentional obfuscation isn't the real danger.  The real problem comes from accidental obfuscation,  as in the following example.&lt;br /&gt;
&lt;br /&gt;
===Example:  Proving the Meaning of Life===&lt;br /&gt;
&lt;br /&gt;
The meaning of life is elusive.  Here is a prime example of why parentheses are needed around macro definitions.&lt;br /&gt;
&lt;br /&gt;
life.c:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;tt&amp;gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #define SIX 1+5      /* Should be (1+5) */&lt;br /&gt;
 #define SEVEN 6+1    /* Should be (6+1) */&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;quot;The meaning of life: %d x %d = %d\n&amp;quot;, SIX, SEVEN, SIX * SEVEN);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/tt&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Rather than evaluating (1+5) * (6+1) as we would hope,  the compiler will now read the statement as 1+(5*6)+1.  Result:  32 rather than 42,  and thousands of years of time wasted by the galaxy's biggest supercomputer.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3193</id>
		<title>C/C plus plus tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3193"/>
		<updated>2004-03-08T02:47:38Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Made some progress with the section on optimization.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comments:  Early and often==&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
===Let the Compiler Nitpick===&lt;br /&gt;
When compiling with GCC or G++, always use the &amp;quot;-Wall&amp;quot; command-line argument to tell GCC/G++ to print extra warnings and errors. This can often help you locate potential problems in your code.  But it's not enough to let the compiler spit the nitpicks at you;  you have to take them seriously.  Warnings are often a sign that your code is doing something it shouldn't.  [Examples?]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Remote Debugging with DDD and gdb===&lt;br /&gt;
&lt;br /&gt;
1. Make sure gdbsever and libthread_db.so.1 on the remote machine.&lt;br /&gt;
&lt;br /&gt;
2. run gdbserver on target:&lt;br /&gt;
gdbserver host:2345 /path/application&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;host&amp;quot; is ignored, so this can be anything. 2345 is an arbitrary TCP&lt;br /&gt;
port not in use.  2345 ususally works, just make sure it does not conflict with other IP ports in use.&lt;br /&gt;
&lt;br /&gt;
The target application on the remote machine does not require symbols (debugging information).&lt;br /&gt;
&lt;br /&gt;
3. On the host (your local PC):&lt;br /&gt;
a. ddd program (must have symbols)&lt;br /&gt;
b. At the (gdb) prompt&lt;br /&gt;
    target remote xxx.xxx.xxx.xxx:2345 &lt;br /&gt;
&lt;br /&gt;
Where the IP address is that of the remote machine.&lt;br /&gt;
&lt;br /&gt;
That's it, remote debugging is up and running.&lt;br /&gt;
&lt;br /&gt;
==Optimization==&lt;br /&gt;
&lt;br /&gt;
Optimizing a program is often more an art than a science.  But even in art,  there are some rules that should be carefully followed (especially for new practitioners who aren't quite sure why the rules are important).&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #1 : DON'T!===&lt;br /&gt;
You're coding along,  minding your own business,  when you notice a simple,  quick optimization just begging to be done.  Maybe it's as simple as replacing &amp;lt;tt&amp;gt;d = c * 2;&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;d = c &amp;lt;&amp;lt; 1;&amp;lt;/tt&amp;gt;.  Why do an expensive multiply when you could do a cheap right-shift and come up with precisely the same result?&lt;br /&gt;
&lt;br /&gt;
Why indeed?  This optimization should do the right thing,  but at the expense of a tiny bit of program clarity.  Program clarity is a precious commodity,  which isn't something that can be said for your computer's processor time.  It may be that you'll end up making precisely this optimization later on.  But right now,  the important thing is to get the program working correctly.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #2 : DON'T!===&lt;br /&gt;
So now the program runs.  It runs like a fifteen year old weiner dog.  Sometimes it sits down on its haunches,  staring off into space as though it's waiting for a doggie treat.  So it's time to go in and replace that multiply with the bitshift,  right?&lt;br /&gt;
&lt;br /&gt;
Patience,  grasshopper.&lt;br /&gt;
&lt;br /&gt;
Before you decide if it's worth investing even one second in optimizing the program,  decide how valuable your effort is going to be.  The value derived from the effort is directly linked to the purpose of the program.  Is it a tiny app you wrote for your own personal use,  that you'll only use once a week?  Is it part of a critical,  high-performance application or library that will be used by millions,  or a scientific number-cruncher which will take years to solve a problem?  Most likely,  it will be somewhere between these two extrema.  To some extent,  &amp;quot;fast enough&amp;quot; is a subjective judgment.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #3 : DON'T!===&lt;br /&gt;
Okay,  I see you're getting impatient.  You want to go in and make that aged dachshund run like a young rotweiler chasing a mailman smothered in barbecue sauce.  But the bad news is,  it's still not time to replace that line of code.  If you go back in and start &amp;quot;optimizing&amp;quot; right now,  you may end up with hundreds of little tweaks,  whose overall effect is to make the code difficult to understand and impossible to maintain.  Even worse,  it may not speed your program up noticeably.&lt;br /&gt;
&lt;br /&gt;
Before you make a single change,  take advantage of a profiler ([[gprof]] ([http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html tutorial]), for example).  A profiler will tell you exactly where your code is spending all its time.  The rationale for this is referred to as [http://en.wikipedia.org/wiki/Amdahl's_law Amdahl's law]:  The amount of time saved by optimizing a section of code cannot be greater than the time the program spent running that code.  For example,  if a single for loop comprises 7% of a program's running time,  then no optimization you could perform on that loop will cause more than a 7% performance increase.&lt;br /&gt;
&lt;br /&gt;
Most programs spend most of their time executing a few very small areas of code.  Find out which areas,  and you'll likely get huge boosts from small changes.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #4 : Never Assume an Optimization Works===&lt;br /&gt;
It is important that you know exactly how the unoptimized version of your program was performing,  because many optimizations don't do anything.  Some &amp;quot;optimizations&amp;quot; will even slow your program.&lt;br /&gt;
&lt;br /&gt;
Part of this is due to the fact that,  without being told,  the compiler will try to do whatever optimizations it considers &amp;quot;safe&amp;quot;,  and a programmer's attempts to optimize the code may interfere with the optimizations the compiler is trying to perform.  The best thing is to perform one optimization,  compare the new performance to the old performance,  decide whether to keep it,  and then move on to the next potential improvement.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #5 : Three Words: Algorithms===&lt;br /&gt;
Very frequently,  the best way to speed up a program is to change the way you solve the problem.  No amount of pointer arithmetic or loop unwinding is going to give you a thousand-fold improvement in runtime,  but changing the algorithm frequently does just that.  [Need details, specifics] &lt;br /&gt;
&lt;br /&gt;
[That's really 90% of optimization (sans details),  but there are also things to cover like pre-caching,  just-in-time calculation,  optimizing for space vs. optimizing for time,  etc.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Save Compiler Optimizations for the End===&lt;br /&gt;
Also, don't use any -O flags when debugging, it can compound current errors and make things really weird. They can possibly add new bugs too, due to the way the compiler does low-level optimization.  The higher the optimization level,  the riskier the optimizations that the compiler will attempt.&lt;br /&gt;
&lt;br /&gt;
Once you know the program works in an unoptimized state,  then it may be time to crank the -O flag up a couple of notches.  Compare both performance and stability between the unoptimized and optimized versions.&lt;br /&gt;
&lt;br /&gt;
==Memory management==&lt;br /&gt;
===Valgrind===&lt;br /&gt;
Many new programmers have difficulties with pointers and sudden segmentation faults due to careless usage. [http://valgrind.kde.org/ Valgrind] is an excellent program to get more information about what is causing the problems.&lt;br /&gt;
&lt;br /&gt;
===new and malloc:  Arch-nemises===&lt;br /&gt;
Don't mix malloc and new; they might work togeather temporarily, but they're bound to cause errors. Pick which one from the start and stay with it. Valgrind will also point out this kind of error.  &lt;br /&gt;
&lt;br /&gt;
''Note: The same can be said for &amp;lt;iostream&amp;gt; and &amp;lt;iostream.h&amp;gt;.  Don't play mix and match.''&lt;br /&gt;
&lt;br /&gt;
==Use Macros With Care==&lt;br /&gt;
Macros are simply precompiler directives that instruct the compiler to replace certain strings of text with others before it attempts to compile.  If used carelessly,  they can make a program terribly confusing.&lt;br /&gt;
&lt;br /&gt;
For example,  if you wanted to be intentionally misleading,  you could write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; #define CLOSE_BLOCK {&lt;br /&gt;
 #define OPEN_BLOCK }&lt;br /&gt;
 #define CIN cout&lt;br /&gt;
 #define COUT cin&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then write the rest of the program as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; for( int i = 0; i &amp;lt; 100; ++i )&lt;br /&gt;
 CLOSE_BLOCK&lt;br /&gt;
    for( int j = 0; j &amp;lt; 100; ++j )&lt;br /&gt;
    CLOSE_BLOCK&lt;br /&gt;
       CIN &amp;lt;&amp;lt; data[ i ][ j ];&lt;br /&gt;
    OPEN_BLOCK&lt;br /&gt;
 OPEN_BLOCK&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But intentional obfuscation isn't the real danger.  The real problem comes from accidental obfuscation,  as in the following example.&lt;br /&gt;
&lt;br /&gt;
===Example:  Proving the Meaning of Life===&lt;br /&gt;
&lt;br /&gt;
The meaning of life is elusive.  Here is a prime example of why parentheses are needed around macro definitions.&lt;br /&gt;
&lt;br /&gt;
life.c:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;tt&amp;gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #define SIX 1+5      /* Should be (1+5) */&lt;br /&gt;
 #define SEVEN 6+1    /* Should be (6+1) */&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;quot;The meaning of life: %d x %d = %d\n&amp;quot;, SIX, SEVEN, SIX * SEVEN);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/tt&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Rather than evaluating (1+5) * (6+1) as we would hope,  the compiler will now read the statement as 1+(5*6)+1.  Result:  32 rather than 42,  and thousands of years of time wasted by the galaxy's biggest supercomputer.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3182</id>
		<title>C/C plus plus tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3182"/>
		<updated>2004-03-08T01:54:58Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Still in progress.  &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Comments:  Early and often==&lt;br /&gt;
&lt;br /&gt;
==Debugging==&lt;br /&gt;
===Let the Compiler Nitpick===&lt;br /&gt;
When compiling with GCC or G++, always use the &amp;quot;-Wall&amp;quot; command-line argument to tell GCC/G++ to print extra warnings and errors. This can often help you locate potential problems in your code.  But it's not enough to let the compiler spit the nitpicks at you;  you have to take them seriously.  Warnings are often a sign that your code is doing something it shouldn't.  [Examples?]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Remote Debugging with DDD and gdb===&lt;br /&gt;
&lt;br /&gt;
1. Make sure gdbsever and libthread_db.so.1 on the remote machine.&lt;br /&gt;
&lt;br /&gt;
2. run gdbserver on target:&lt;br /&gt;
gdbserver host:2345 /path/application&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;host&amp;quot; is ignored, so this can be anything. 2345 is an arbitrary TCP&lt;br /&gt;
port not in use.  2345 ususally works, just make sure it does not conflict with other IP ports in use.&lt;br /&gt;
&lt;br /&gt;
The target application on the remote machine does not require symbols (debugging information).&lt;br /&gt;
&lt;br /&gt;
3. On the host (your local PC):&lt;br /&gt;
a. ddd program (must have symbols)&lt;br /&gt;
b. At the (gdb) prompt&lt;br /&gt;
    target remote xxx.xxx.xxx.xxx:2345 &lt;br /&gt;
&lt;br /&gt;
Where the IP address is that of the remote machine.&lt;br /&gt;
&lt;br /&gt;
That's it, remote debugging is up and running.&lt;br /&gt;
&lt;br /&gt;
==Optimization==&lt;br /&gt;
&lt;br /&gt;
Optimizing a program is often more an art than a science.  But even in art,  there are some rules that should be carefully followed (especially for new practitioners who aren't quite sure why the rules are important).&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #1 : DON'T!===&lt;br /&gt;
You're coding along,  minding your own business,  when you notice a simple,  quick optimization just begging to be done.  Maybe it's as simple as replacing &amp;lt;tt&amp;gt;d = c * 2;&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;d = c &amp;lt;&amp;lt; 1;&amp;lt;/t&amp;gt;.  Why do an expensive multiply when you could do a cheap right-shift and come up with precisely the same result?&lt;br /&gt;
&lt;br /&gt;
Why indeed?  This optimization should do the right thing,  but at the expense of a tiny bit of program clarity.  Program clarity is a precious commodity,  which isn't something that can be said for your computer's processor time.  It may be that you'll end up making precisely this optimization later on.  But right now,  the important thing is to get the program working correctly.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #2 : DON'T!===&lt;br /&gt;
So now the program runs.  It runs like a fifteen year old weiner dog.  Sometimes it sits down on its haunches,  staring off into space as though it's waiting for a doggie treat.  So it's time to go in and replace that multiply with the bitshift,  right?&lt;br /&gt;
&lt;br /&gt;
Patience,  grasshopper.&lt;br /&gt;
&lt;br /&gt;
Before you decide if it's worth investing even one second in optimizing the program,  decide how valuable your effort is going to be.  The value derived from the effort is directly linked to the purpose of the program.  Is it a tiny app you wrote for your own personal use,  that you'll only use once a week?  Is it part of a critical,  high-performance application or library that will be used by millions,  or a scientific number-cruncher which will take years to solve a problem?  Most likely,  it will be somewhere between these two extrema.  To some extent,  &amp;quot;fast enough&amp;quot; is a subjective judgment.&lt;br /&gt;
&lt;br /&gt;
===Optimization Rule #3 : DON'T!===&lt;br /&gt;
Okay,  I see you're getting impatient.  You want to go in and make that aged dachshund run like a young rotweiler chasing a mailman smothered in barbecue sauce.  But the bad news is,  it's still not time to replace that line of code.  If you go back in and start &amp;quot;optimizing&amp;quot; right now,  you may end up with hundreds of little tweaks,  whose overall effect is to make the code difficult to understand and impossible to maintain.  Even worse,  it may not speed your program up noticeably.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Save Compiler Optimizations for the End===&lt;br /&gt;
Also, don't use any -O flags when debugging, it can compound current errors and make things really weird. They can possibly add new bugs too, due to the way the compiler does low-level optimization.  The higher the optimization level,  the riskier the optimizations that the compiler will attempt.&lt;br /&gt;
&lt;br /&gt;
Once you know the program works in an unoptimized state,  then it may be time to crank the -O flag up a couple of notches.  Compare both performance and stability between the unoptimized and optimized versions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Memory management==&lt;br /&gt;
===Valgrind===&lt;br /&gt;
Many new programmers have difficulties with pointers and sudden segmentation faults due to careless usage. [http://valgrind.kde.org/ Valgrind] is an excellent program to get more information about what is causing the problems.&lt;br /&gt;
&lt;br /&gt;
===new and malloc:  Arch-nemises===&lt;br /&gt;
Don't mix malloc and new; they might work togeather temporarily, but they're bound to cause errors. Pick which one from the start and stay with it. Valgrind will also point out this kind of error.  &lt;br /&gt;
&lt;br /&gt;
''Note: The same can be said for &amp;lt;iostream&amp;gt; and &amp;lt;iostream.h&amp;gt;.  Don't play mix and match.''&lt;br /&gt;
&lt;br /&gt;
==Use Macros With Care==&lt;br /&gt;
Macros are simply precompiler directives that instruct the compiler to replace certain strings of text with others before it attempts to compile.  If used carelessly,  they can make a program terribly confusing.&lt;br /&gt;
&lt;br /&gt;
For example,  if you wanted to be intentionally misleading,  you could write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; #define CLOSE_BLOCK {&lt;br /&gt;
 #define OPEN_BLOCK }&lt;br /&gt;
 #define CIN cout&lt;br /&gt;
 #define COUT cin&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then write the rest of the program as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt; for( int i = 0; i &amp;lt; 100; ++i )&lt;br /&gt;
 CLOSE_BLOCK&lt;br /&gt;
    for( int j = 0; j &amp;lt; 100; ++j )&lt;br /&gt;
    CLOSE_BLOCK&lt;br /&gt;
       CIN &amp;lt;&amp;lt; data[ i ][ j ];&lt;br /&gt;
    OPEN_BLOCK&lt;br /&gt;
 OPEN_BLOCK&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But intentional obfuscation isn't the real danger.  The real problem comes from accidental obfuscation,  as in the following example.&lt;br /&gt;
&lt;br /&gt;
===Example:  Proving the Meaning of Life===&lt;br /&gt;
&lt;br /&gt;
The meaning of life is elusive.  Here is a prime example of why parentheses are needed around macro definitions.&lt;br /&gt;
&lt;br /&gt;
life.c:&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;tt&amp;gt; #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #define SIX 1+5      /* Should be (1+5) */&lt;br /&gt;
 #define SEVEN 6+1    /* Should be (6+1) */&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;quot;The meaning of life: %d x %d = %d\n&amp;quot;, SIX, SEVEN, SIX * SEVEN);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&amp;lt;/tt&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
Rather than evaluating (1+5) * (6+1) as we would hope,  the compiler will now read the statement as 1+(5*6)+1.  Result:  32 rather than 42,  and thousands of years of time wasted by the galaxy's biggest supercomputer.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=User:Chalupamaster92&amp;diff=4333</id>
		<title>User:Chalupamaster92</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=User:Chalupamaster92&amp;diff=4333"/>
		<updated>2004-03-08T00:56:39Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suppose you wonder why I call myself the master of the chalupa.  Frankly,  so do I.&lt;br /&gt;
&lt;br /&gt;
The name's Bryce.  Comp sci major at the University of Utah.  Been toying with Linux on and off since 1999,  primarily due to the influence of Slashdot.  &lt;br /&gt;
&lt;br /&gt;
I think this is a cool and useful project,  and I'd like to contribute.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Especially a master of the the chalupa of the 92nd degree. Wow. That's some chalupa-mastery. :)&lt;br /&gt;
&lt;br /&gt;
Nah, the reason I post: I noticed you ask about making indents - check out [[LinuxQuestions.org_Wiki:Wiki_markup|markup help]], and welcome.&lt;br /&gt;
&lt;br /&gt;
[[User:Digiot|Digiot]] 01:57, Mar 7, 2004 (EST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I wish I mastered Chalupa like this guy. The C_plus_plus template looks good - could you add the same for [[C]] and [[Java]]?&lt;br /&gt;
&lt;br /&gt;
[[User:MHouliston|MHouliston]] 18:26, Mar 7, 2004 (EST)&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Talk:General_programming_tips&amp;diff=6179</id>
		<title>Talk:General programming tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Talk:General_programming_tips&amp;diff=6179"/>
		<updated>2004-03-08T00:40:42Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Call it &amp;quot;General programming overview&amp;quot;?&lt;br /&gt;
&lt;br /&gt;
Still,  it's a useful idea.&lt;br /&gt;
&lt;br /&gt;
[[User:Chalupamaster92|Chalupamaster92]] 19:40, Mar 7, 2004 (EST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I created this page to give the seeking visitor something to start with: a language independent philosophy of programming and a feeling for which languages are common, without going into greater detail. Comments?&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3179</id>
		<title>C/C plus plus tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3179"/>
		<updated>2004-03-08T00:22:58Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Added minor point about iostream&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
====Let the Compiler Nitpick====&lt;br /&gt;
When compiling with GCC or G++, always use the &amp;quot;-Wall&amp;quot; command-line argument to tell GCC/G++ to print extra warnings and errors. This can often help you locate potential problems in your code.&lt;br /&gt;
&lt;br /&gt;
====Listen to the Nitpicky Compiler====&lt;br /&gt;
Warnings are often a sign that your code is doing something it shouldn't.  &lt;br /&gt;
&lt;br /&gt;
Also, don't use any -O flags when debugging, it can compound current errors and make things really weird. They can possibly add new bugs too, due to the way the compiler does low-level optimization.&lt;br /&gt;
&lt;br /&gt;
====Remote Debugging with DDD and gdb====&lt;br /&gt;
&lt;br /&gt;
1. Make sure gdbsever and libthread_db.so.1 on the remote machine.&lt;br /&gt;
&lt;br /&gt;
2. run gdbserver on target:&lt;br /&gt;
gdbserver host:2345 /path/application&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;host&amp;quot; is ignored, so this can be anything. 2345 is an arbitrary TCP&lt;br /&gt;
port not in use.  2345 ususally works, just make sure it does not conflict with other IP ports in use.&lt;br /&gt;
&lt;br /&gt;
The target application on the remote machine does not require symbols (debugging information).&lt;br /&gt;
&lt;br /&gt;
3. On the host (your local PC):&lt;br /&gt;
a. ddd program (must have symbols)&lt;br /&gt;
b. At the (gdb) prompt&lt;br /&gt;
    target remote xxx.xxx.xxx.xxx:2345 &lt;br /&gt;
&lt;br /&gt;
Where the IP address is that of the remote machine.&lt;br /&gt;
&lt;br /&gt;
That's it, remote debugging is up and running.&lt;br /&gt;
&lt;br /&gt;
===Memory management===&lt;br /&gt;
====Valgrind====&lt;br /&gt;
Many new programmers have difficulties with pointers and sudden segmentation faults due to careless usage. [http://valgrind.kde.org/ Valgrind] is an excellent program to get more information about what is causing the problems.&lt;br /&gt;
&lt;br /&gt;
====new and malloc:  Arch-nemises====&lt;br /&gt;
Don't mix malloc and new; they might work togeather temporarily, but they're bound to cause errors. Pick which one from the start and stay with it. Valgrind will also point out this kind of error.  &lt;br /&gt;
&lt;br /&gt;
''Note: The same can be said for &amp;lt;iostream&amp;gt; and &amp;lt;iostream.h&amp;gt;.  Don't play mix and match.''&lt;br /&gt;
&lt;br /&gt;
===Use Macros With Care===&lt;br /&gt;
====Example:  Proving the Meaning of Life====&lt;br /&gt;
&lt;br /&gt;
The meaning of life is elusive.  Here is a prime example of why parentheses are needed around macro definitions.&lt;br /&gt;
&lt;br /&gt;
life.c:&lt;br /&gt;
----&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #define SIX 1+5      /* Should be (1+5) */&lt;br /&gt;
 #define SEVEN 6+1    /* Should be (6+1) */&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;quot;The meaning of life: %d x %d = %d\n&amp;quot;, SIX, SEVEN, SIX * SEVEN);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
Rather than evaluating (1+5) * (6+1) as we would hope,  the compiler will now read the statement as 1+(5*6)+1.  Result:  32 rather than 42,  and thousands of years of time wasted by the galaxy's biggest supercomputer.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C_plus_plus&amp;diff=4118</id>
		<title>C plus plus</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C_plus_plus&amp;diff=4118"/>
		<updated>2004-03-07T23:20:36Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Here's an idea for the outline.  &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''C++'''&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
(Feed me)&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
(Feed me)&lt;br /&gt;
&lt;br /&gt;
==Language Features==&lt;br /&gt;
&lt;br /&gt;
(Feed me)&lt;br /&gt;
&lt;br /&gt;
==Further Reading==&lt;br /&gt;
&lt;br /&gt;
===Wiki pages===&lt;br /&gt;
*[[C plus plus tutorial|Tutorial]]&lt;br /&gt;
*[[C/C plus plus tips|Tips and Tricks]]&lt;br /&gt;
*[[C plus plus practices|Good Programming Practices]]&lt;br /&gt;
*[[C plus plus tools|Linux C++ tools]]&lt;br /&gt;
&lt;br /&gt;
===Books===&lt;br /&gt;
*''The C++ Programming Language'', Bjarne Stroustrup&amp;lt;br/&amp;gt;&lt;br /&gt;
*''Effective C++: 50 Specific Ways to Improve Your Programs and Design'', [http://www.aristeia.com/ Scott Meyers]&amp;lt;br/&amp;gt;&lt;br /&gt;
*''Code Complete'', Steve McConnell&lt;br /&gt;
&lt;br /&gt;
===External links===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''This article is a [[LinuxQuestions.org_Wiki:stub_articles|stub]] and needs to be finished. [[LinuxQuestions.org_Wiki:plunging_forward|Plunge forward]] and [[LinuxQuestions.org_Wiki:How_to_edit_a_page|help it grow]] !''&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: [[C]], [[C/C_plus_plus tips|C and C++ tips]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3047</id>
		<title>C/C plus plus tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=C/C_plus_plus_tips&amp;diff=3047"/>
		<updated>2004-03-07T19:14:14Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: There's a lot of room to build here.  &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&lt;br /&gt;
===Debugging===&lt;br /&gt;
====Let the Compiler Nitpick===&lt;br /&gt;
When compiling with GCC or G++, always use the &amp;quot;-Wall&amp;quot; command-line argument to tell GCC/G++ to print extra warnings and errors. This can often help you locate potential problems in your code.&lt;br /&gt;
&lt;br /&gt;
====Listen to the Nitpicky Compiler====&lt;br /&gt;
Warnings are often a sign that your code is doing something it shouldn't.  &lt;br /&gt;
&lt;br /&gt;
Also, don't use any -O flags when debugging, it can compound current errors and make things really weird. They can possibly add new bugs too, due to the way the compiler does low-level optimization.&lt;br /&gt;
&lt;br /&gt;
====Remote Debugging with DDD and gdb====&lt;br /&gt;
&lt;br /&gt;
1. Make sure gdbsever and libthread_db.so.1 on the remote machine.&lt;br /&gt;
&lt;br /&gt;
2. run gdbserver on target:&lt;br /&gt;
gdbserver host:2345 /path/application&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;host&amp;quot; is ignored, so this can be anything. 2345 is an arbitrary TCP&lt;br /&gt;
port not in use.  2345 ususally works, just make sure it does not conflict with other IP ports in use.&lt;br /&gt;
&lt;br /&gt;
The target application on the remote machine does not require symbols (debugging information).&lt;br /&gt;
&lt;br /&gt;
3. On the host (your local PC):&lt;br /&gt;
a. ddd program (must have symbols)&lt;br /&gt;
b. At the (gdb) prompt&lt;br /&gt;
    target remote xxx.xxx.xxx.xxx:2345 &lt;br /&gt;
&lt;br /&gt;
Where the IP address is that of the remote machine.&lt;br /&gt;
&lt;br /&gt;
That's it, remote debugging is up and running.&lt;br /&gt;
&lt;br /&gt;
===Memory management===&lt;br /&gt;
====Valgrind====&lt;br /&gt;
Many new programmers have difficulties with pointers and sudden segmentation faults due to careless usage. [http://valgrind.kde.org/ Valgrind] is an excellent program to get more information about what is causing the problems.&lt;br /&gt;
&lt;br /&gt;
====new and malloc:  Arch-nemises====&lt;br /&gt;
Don't mix malloc and new; they might work togeather temporarily, but they're bound to cause errors. Pick which one from the start and stay with it. Valgrind will also point out this kind of error.&lt;br /&gt;
&lt;br /&gt;
===Use Macros With Care===&lt;br /&gt;
====Example:  Proving the Meaning of Life====&lt;br /&gt;
&lt;br /&gt;
The meaning of life is elusive.  Here is a prime example of why parentheses are needed around macro definitions.&lt;br /&gt;
&lt;br /&gt;
life.c:&lt;br /&gt;
----&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 #define SIX 1+5      /* Should be (1+5) */&lt;br /&gt;
 #define SEVEN 6+1    /* Should be (6+1) */&lt;br /&gt;
&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;quot;The meaning of life: %d x %d = %d\n&amp;quot;, SIX, SEVEN, SIX * SEVEN);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
----&lt;br /&gt;
Rather than evaluating (1+5) * (6+1) as we would hope,  the compiler will now read the statement as 1+(5*6)+1.  Result:  32 rather than 42,  and thousands of years of time wasted by the galaxy's biggest supercomputer.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Email&amp;diff=22313</id>
		<title>Email</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Email&amp;diff=22313"/>
		<updated>2004-03-07T18:55:51Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[e-mail]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Talk:All_commands&amp;diff=3006</id>
		<title>Talk:All commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Talk:All_commands&amp;diff=3006"/>
		<updated>2004-03-07T17:21:25Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a suggestion for a new format:&lt;br /&gt;
&lt;br /&gt;
[[a commands|A]]&lt;br /&gt;
*[[alias]], [[at]], [[anacron]], [[apropos]]  ''[[a commands|More]]''&lt;br /&gt;
&lt;br /&gt;
The goal is to make the &amp;quot;most important&amp;quot; commands--the ones that crop up in normal use--quickly accessible.  Of course,  there will be disagreement over which ones are the most important,  but I don't see that being a major problem.&lt;br /&gt;
&lt;br /&gt;
It would also get rid of the somewhat repetitive &amp;quot;Commands beginning with the letter [letter]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Anyways,  that's what I'm going to do.  If anyone's really unhappy about it,  go ahead and revert.&lt;br /&gt;
&lt;br /&gt;
[[User:Chalupamaster92|Chalupamaster92]] 12:21, Mar 7, 2004 (EST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is a good collection and nice effort by you but how about also providing the link to the site where you got all this from.&lt;br /&gt;
&lt;br /&gt;
Plus I will be adding links to these commands. Feel free to join in.&lt;br /&gt;
&lt;br /&gt;
[[User:Linuxlala|Linuxlala]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I have broken this page down as each time I wanted to edit, it said that the page is too big, break it down. I also kinda like the way it looks now. Easy accesibility. &lt;br /&gt;
&lt;br /&gt;
Now it would be easy for people to contribute or edit the commands.&lt;br /&gt;
&lt;br /&gt;
[[User:Linuxlala|Linuxlala]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Talk:All_commands&amp;diff=2969</id>
		<title>Talk:All commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Talk:All_commands&amp;diff=2969"/>
		<updated>2004-03-07T17:10:29Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Suggestion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here's a suggestion for a new format:&lt;br /&gt;
&lt;br /&gt;
===[[a commands|A]]===&lt;br /&gt;
*[[alias]], [[at]], [[anacron]], [[apropos]]  ''[[a commands|More]]''&lt;br /&gt;
&lt;br /&gt;
The goal is to make the &amp;quot;most important&amp;quot; commands--the ones that crop up in normal use--quickly accessible.  Of course,  there will be disagreement over which ones are the most important,  but I don't see that being a major problem.&lt;br /&gt;
&lt;br /&gt;
It would also get rid of the somewhat repetitive &amp;quot;Commands beginning with the letter [letter]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Anyways,  that's what I'm going to do.  If anyone's really unhappy about it,  go ahead and revert.&lt;br /&gt;
&lt;br /&gt;
[[User:Chalupamaster92|Chalupamaster92]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
This is a good collection and nice effort by you but how about also providing the link to the site where you got all this from.&lt;br /&gt;
&lt;br /&gt;
Plus I will be adding links to these commands. Feel free to join in.&lt;br /&gt;
&lt;br /&gt;
[[User:Linuxlala|Linuxlala]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
I have broken this page down as each time I wanted to edit, it said that the page is too big, break it down. I also kinda like the way it looks now. Easy accesibility. &lt;br /&gt;
&lt;br /&gt;
Now it would be easy for people to contribute or edit the commands.&lt;br /&gt;
&lt;br /&gt;
[[User:Linuxlala|Linuxlala]]&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Run_Levels&amp;diff=2831</id>
		<title>Run Levels</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Run_Levels&amp;diff=2831"/>
		<updated>2004-03-07T14:25:00Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What are Run Levels?==&lt;br /&gt;
&lt;br /&gt;
Each of the 6 Run Levels of [[Linux]] is a different &amp;quot;Operating Mode&amp;quot;. This means that it has different settings, independent of any other run level, allowing it to run different tasks and applications as required. Each  Run Level can be configured to perform different tasks using a [[Configuration File]] in the /etc directory (discussed later). If you are familiar with Microsoft's [[Windows]], it may be helpful to think of the run level system as being similar to the choice between &amp;quot;Safe Mode&amp;quot;, &amp;quot;Safe Mode with Networking&amp;quot;, &amp;quot;Command Prompt&amp;quot;, etc, that you are presented with when the system has shutdown uncleanly - not that [[Linux]] needs to be shutdown uncleanly to change run level.&lt;br /&gt;
&lt;br /&gt;
==What does each Run Level do?==&lt;br /&gt;
&lt;br /&gt;
*Run level 1 provides [[Single User Mode]]&lt;br /&gt;
*Run level 2 provides [[Single User Mode]] with [[Networking]] support&lt;br /&gt;
*Run level 3 provides [[Multi-User Mode]] with a [[Command Line Interface]], rather than a graphical [[Window Manager]]. This is convenient if you wish to perform menial tasks without the overhead of pretty anti-aliased windows&lt;br /&gt;
*Run level 4 has not yet been defined&lt;br /&gt;
*Run level 5 provides [[Multi-User Mode]] with a graphical [[Window Manager]]. This is the default run level that is booted on many [[Distributions]] and the one that you are most likely to have for everyday use.&lt;br /&gt;
*Run level 6 shuts down the system, closing necessary [[Applications]] and [[Daemons]]. For obvious reasons, this run level should not be used if you want to do anything productive.&lt;br /&gt;
&lt;br /&gt;
==Configuring each Run Level==&lt;br /&gt;
&lt;br /&gt;
(Could someone more familiar with this add it please?)&lt;br /&gt;
&lt;br /&gt;
==How to change Run Level==&lt;br /&gt;
&lt;br /&gt;
To switch between run levels in the terminal you use this command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;init &amp;lt;Run Level Number&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To switch between run levels using the keyboard (at least in RH9 with Gnome, correct this for any other distros/environments) you use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;Ctrl+Alt+F&amp;lt;Run Level Number&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
For example, to switch to run level 1, you use &amp;lt;tt&amp;gt;Ctrl+Alt+F1&amp;lt;/tt&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=BitchX&amp;diff=3370</id>
		<title>BitchX</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=BitchX&amp;diff=3370"/>
		<updated>2004-03-07T08:34:38Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Very stubby.  Not much I can do to save it.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BitchX is a text based [[IRC]] client.  Very useful to [[ssh]] into your computer from somewhere random, and get on your favorite irc server.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
*[http://www.bitchx.org BitchX home page]&lt;br /&gt;
*[http://bitchx.org/download.php Downloads]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=OpenOffice&amp;diff=2734</id>
		<title>OpenOffice</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=OpenOffice&amp;diff=2734"/>
		<updated>2004-03-07T08:16:27Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Added links to related pages, including pages for individual applications.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''OpenOffice.org''' is both an open source product and a project. The product is a multi-platform office productivity suite. It combines the key desktop applications--such as a [[OpenOffice_swriter|word processor]], [[OpenOffice_scalc|spreadsheet]], [[OpenOffice_simpress|presentation manager]],  [[OpenOffice_sdraw|drawing program]],  and [[OpenOffice_sweb|web page design tool]]--with a user interface and feature set similar to other office suites. Sophisticated and flexible, OpenOffice.org also works transparently with a variety of file formats, including those of Microsoft Office. &lt;br /&gt;
&lt;br /&gt;
Available in 25 languages with more being constantly added by the community, OpenOffice.org runs stably and natively on [[Solaris]], [[Common_Questions_and_Misconceptions#Q:_What_is_Linux?|Linux]] (including PPC Linux), and [[Windows]]. Additional ports, such as for [[FreeBSD]], [[IRIX]], and Mac [[OS X]], are in various stages of completion. &lt;br /&gt;
&lt;br /&gt;
Written in C++ and with documented [[API|APIs]] licensed under the [[LGPL]] and [[SISSL]] Open Source licenses, OpenOffice.org allows any knowledgeable developer to benefit from the source. And because the file format for OpenOffice.org is [[XML]], interoperability is easy, making future development and adoption more certain.&lt;br /&gt;
&lt;br /&gt;
[[SUN]] sells a commercial office suite based on OpenOffice.org,  called [[StarOffice]].  Students can download it free from [http://wwws.sun.com/software/download/desktop_app.html sun.com].&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
*[http://www.openoffice.org/ The OpenOffice.org homepage]&lt;br /&gt;
**[http://download.openoffice.org/index.html Download page]&lt;br /&gt;
**[http://support.openoffice.org/index.html Support]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Emacs&amp;diff=3029</id>
		<title>Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Emacs&amp;diff=3029"/>
		<updated>2004-03-07T07:54:28Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Emacs''' is a powerful (some might say too powerful) [[Editor|Text Editor]] created and maintained by the [[GNU]] project. AT it's heart is a [[LISP]] interpretter, allowing it to perform highly complex tasks with a great degree of customization. It supports syntax highlighting, [[CVS]], [[diff]]/[[patch]] and just about anything you could wish to (or not for that matter) write using the built-in LISP extensibility.&lt;br /&gt;
&lt;br /&gt;
*Advantages:&lt;br /&gt;
** Hardly anything it can't do ... &lt;br /&gt;
** It has many optional modules that serve specialised purposes&lt;br /&gt;
&lt;br /&gt;
*Disadvantages: &lt;br /&gt;
** emacs is a huge and complex program&lt;br /&gt;
** steep learning curve&lt;br /&gt;
&lt;br /&gt;
Latest stable release, 21.3 was released on March 24, 2003&lt;br /&gt;
&lt;br /&gt;
[http://www.gnu.org/software/emacs/ Emacs' homepage]&lt;br /&gt;
&lt;br /&gt;
Some more emacs links:&lt;br /&gt;
&lt;br /&gt;
ELSE:&lt;br /&gt;
&lt;br /&gt;
[http://www.zipworld.com.au/~peterm/ Emacs Language Sensitive Editor]&lt;br /&gt;
&lt;br /&gt;
Else is very nifty, the base language files need some &lt;br /&gt;
customisation, though (mind you, the C ones are great,&lt;br /&gt;
C++ needs work, didn't look into the others in detail).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wiki:&lt;br /&gt;
&lt;br /&gt;
[http://www.emacswiki.org/cgi-bin/wiki/ Emacs-wiki]&lt;br /&gt;
&lt;br /&gt;
Wiki for emacs - usage similar to this one, valuable source of information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.emacs:&lt;br /&gt;
&lt;br /&gt;
[http://www.dotfiles.com/index.php3?app_id=6  dot-files]&lt;br /&gt;
&lt;br /&gt;
Heaps of nice customised .emacs files :}&lt;br /&gt;
&lt;br /&gt;
==Detailed Pages==&lt;br /&gt;
* [[Emacs_keystrokes|Keystrokes]]&lt;br /&gt;
* [[Emacs_modes|Modes]]&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=6442</id>
		<title>Emacs keystrokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=6442"/>
		<updated>2004-03-07T07:53:30Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Emacs''' works its text-editing wonders through a combination of indirection and Lisp-jitsu.  When you type a key--'k', for instance--Emacs doesn't simply paint the character on the screen like a lazier text editor would.  Instead,  it takes the keystroke and sees what sort of commands are &amp;quot;bound&amp;quot; to it.  In the case of 'k',  the command it issues is a straightforward &amp;quot;insert me where the cursor is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
At this point,  no advantage is apparent.  But the commands bound to a keystroke can be arbitrarily complex.  For example,  when Emacs is running in C [[Emacs_modes|mode]],  pressing the &amp;lt;TAB&amp;gt; key doesn't indent everything after the cursor by a single tabspace.  Instead,  it analyzes the code that you are writing,  and indents the entire line to whatever depth appears to make the most sense.&lt;br /&gt;
&lt;br /&gt;
There are many more examples,  but the upshot is that if you're willing to learn the Emacs way,  there are many tips and tricks to pick up that can make it a very productive environment.  Just be warned that,  before it's over,  you're going to be bending and contorting your fingers in ways you never imagined.&lt;br /&gt;
&lt;br /&gt;
==Basic Keystrokes==&lt;br /&gt;
&lt;br /&gt;
The keystroke &amp;lt;CTRL&amp;gt;+X is generally represented as C-x,  while &amp;lt;META&amp;gt;-v would be displayed with the shorthand M-v.  The meta key varies from system to system,  but is usually the &amp;lt;ALT&amp;gt; key,  or sometimes the &amp;lt;ESC&amp;gt; key.&lt;br /&gt;
&lt;br /&gt;
If two commands are separated by a comma (C-p, C-n for example) then they are separate commands.  Otherwise they are part of the same command.  For example,  C-x C-s means you type &amp;lt;CTRL&amp;gt;-x,  then &amp;lt;CTRL&amp;gt;-s to execute the command.&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
* C-p, C-n, C-f, C-b :  Functionally equivalent to the arrow buttons. C-p moves the cursor up one line,  C-n moves it down a line,  C-f moves one space forward,  and C-b moves one space backwards.  It may seem silly to have these commands when the arrow keys are right there.  But once you're used to them [and they do take some getting used to] you may decide that 'right there' just isn't close enough,  and it's nice to be able to navigate without moving your hands away from normal typing position.&lt;br /&gt;
&lt;br /&gt;
* C-a, C-e :  C-a moves to the beginning of a line,  while C-e moves to the end of the line.&lt;br /&gt;
&lt;br /&gt;
''Note: These keystrokes aren't specific to Emacs.  For example,  all six work on the command line,  and they also work inside forms on the web browser I'm using to type this.  You may find it advantageous to try and make them second nature.''&lt;br /&gt;
&lt;br /&gt;
* C-l :  Centers your view of the buffer so that the cursor is in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
* C-v, M-v :  Move the cursor up and down by half a page of text at a time.&lt;br /&gt;
&lt;br /&gt;
* M-&amp;lt;, M-&amp;gt; :  Moves the cursor to the beginning and end of the entire document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Files and Buffers===&lt;br /&gt;
&lt;br /&gt;
* C-x C-s :  Saves the current buffer.  If there is no file associated with the buffer,  Emacs prompts for a filename.&lt;br /&gt;
&lt;br /&gt;
* C-x C-w :  Saves the current buffer,  requesting a name.&lt;br /&gt;
&lt;br /&gt;
* C-x f :  Open a file.&lt;br /&gt;
&lt;br /&gt;
* C-x d :  Open a directory.&lt;br /&gt;
&lt;br /&gt;
* C-x b,  C-x C-b:  The first takes you to another buffer.  the second takes you to a list of all available buffers.&lt;br /&gt;
&lt;br /&gt;
* C-x 1, C-x 2, C-x 3 :  C-x 2 and 3 split the current window.  2 splits horizontally,  while 3 splits vertically.  C-x 1 gets rid of the various splits,  leaving you with a single window.&lt;br /&gt;
&lt;br /&gt;
* C-g :  Gets you out of a minibuffer.  A minibuffer is a one-line buffer at the bottom of the screen,  where you type in things like filenames and search expressions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Cutting and Pasting===&lt;br /&gt;
&lt;br /&gt;
* C-k :  Removes the portion of the line following the cursor and places it on the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-[space] :  Sets a &amp;quot;mark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* C-w :  Removes everything between the cursor and the &amp;quot;mark&amp;quot; and places it on the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-y : Inserts the contents of the clipboard into the buffer.&lt;br /&gt;
&lt;br /&gt;
* M-y : After pressing C-y,  use this to gain access to earlier items in the clipboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Help===&lt;br /&gt;
&lt;br /&gt;
* C-h t :  This takes you to a tutorial which tries to teach you all this,  and a bunch of other stuff besides.  It's very helpful for the aspiring Emacs enthusiast.&lt;br /&gt;
&lt;br /&gt;
* M-x doctor :  Sometimes you just have to talk out your problems with a sympathetic program.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
&lt;br /&gt;
* M-/ :  Autocompletion.  Emacs looks through the buffer for possible completions of whatever you're typing at the moment.  For example,  if you've typed &amp;quot;rotweiler&amp;quot; at some point previous,  and wish to reuse the word,  you could type rot'''M-/''' and it will fill in the &amp;quot;weiler&amp;quot;.  Of course,  it may also come up with &amp;quot;rotation&amp;quot; if it sees that word as well.  Can be very handy.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=2713</id>
		<title>Emacs keystrokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=2713"/>
		<updated>2004-03-07T07:53:07Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: More to be done.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Emacs''' tends to work its text-editing wonders through a combination of indirection and Lisp-jitsu.  When you type a key--'k', for instance--Emacs doesn't simply paint the character on the screen like a lazier text editor would.  Instead,  it takes the keystroke and sees what sort of commands are &amp;quot;bound&amp;quot; to it.  In the case of 'k',  the command it issues is a straightforward &amp;quot;insert me where the cursor is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
At this point,  no advantage is apparent.  But the commands bound to a keystroke can be arbitrarily complex.  For example,  when Emacs is running in C [[Emacs_modes|mode]],  pressing the &amp;lt;TAB&amp;gt; key doesn't indent everything after the cursor by a single tabspace.  Instead,  it analyzes the code that you are writing,  and indents the entire line to whatever depth appears to make the most sense.&lt;br /&gt;
&lt;br /&gt;
There are many more examples,  but the upshot is that if you're willing to learn the Emacs way,  there are many tips and tricks to pick up that can make it a very productive environment.  Just be warned that,  before it's over,  you're going to be bending and contorting your fingers in ways you never imagined.&lt;br /&gt;
&lt;br /&gt;
==Basic Keystrokes==&lt;br /&gt;
&lt;br /&gt;
The keystroke &amp;lt;CTRL&amp;gt;+X is generally represented as C-x,  while &amp;lt;META&amp;gt;-v would be displayed with the shorthand M-v.  The meta key varies from system to system,  but is usually the &amp;lt;ALT&amp;gt; key,  or sometimes the &amp;lt;ESC&amp;gt; key.&lt;br /&gt;
&lt;br /&gt;
If two commands are separated by a comma (C-p, C-n for example) then they are separate commands.  Otherwise they are part of the same command.  For example,  C-x C-s means you type &amp;lt;CTRL&amp;gt;-x,  then &amp;lt;CTRL&amp;gt;-s to execute the command.&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
* C-p, C-n, C-f, C-b :  Functionally equivalent to the arrow buttons. C-p moves the cursor up one line,  C-n moves it down a line,  C-f moves one space forward,  and C-b moves one space backwards.  It may seem silly to have these commands when the arrow keys are right there.  But once you're used to them [and they do take some getting used to] you may decide that 'right there' just isn't close enough,  and it's nice to be able to navigate without moving your hands away from normal typing position.&lt;br /&gt;
&lt;br /&gt;
* C-a, C-e :  C-a moves to the beginning of a line,  while C-e moves to the end of the line.&lt;br /&gt;
&lt;br /&gt;
''Note: These keystrokes aren't specific to Emacs.  For example,  all six work on the command line,  and they also work inside forms on the web browser I'm using to type this.  You may find it advantageous to try and make them second nature.''&lt;br /&gt;
&lt;br /&gt;
* C-l :  Centers your view of the buffer so that the cursor is in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
* C-v, M-v :  Move the cursor up and down by half a page of text at a time.&lt;br /&gt;
&lt;br /&gt;
* M-&amp;lt;, M-&amp;gt; :  Moves the cursor to the beginning and end of the entire document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Files and Buffers===&lt;br /&gt;
&lt;br /&gt;
* C-x C-s :  Saves the current buffer.  If there is no file associated with the buffer,  Emacs prompts for a filename.&lt;br /&gt;
&lt;br /&gt;
* C-x C-w :  Saves the current buffer,  requesting a name.&lt;br /&gt;
&lt;br /&gt;
* C-x f :  Open a file.&lt;br /&gt;
&lt;br /&gt;
* C-x d :  Open a directory.&lt;br /&gt;
&lt;br /&gt;
* C-x b,  C-x C-b:  The first takes you to another buffer.  the second takes you to a list of all available buffers.&lt;br /&gt;
&lt;br /&gt;
* C-x 1, C-x 2, C-x 3 :  C-x 2 and 3 split the current window.  2 splits horizontally,  while 3 splits vertically.  C-x 1 gets rid of the various splits,  leaving you with a single window.&lt;br /&gt;
&lt;br /&gt;
* C-g :  Gets you out of a minibuffer.  A minibuffer is a one-line buffer at the bottom of the screen,  where you type in things like filenames and search expressions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Cutting and Pasting===&lt;br /&gt;
&lt;br /&gt;
* C-k :  Removes the portion of the line following the cursor and places it on the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-[space] :  Sets a &amp;quot;mark&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* C-w :  Removes everything between the cursor and the &amp;quot;mark&amp;quot; and places it on the clipboard.&lt;br /&gt;
&lt;br /&gt;
* C-y : Inserts the contents of the clipboard into the buffer.&lt;br /&gt;
&lt;br /&gt;
* M-y : After pressing C-y,  use this to gain access to earlier items in the clipboard.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Help===&lt;br /&gt;
&lt;br /&gt;
* C-h t :  This takes you to a tutorial which tries to teach you all this,  and a bunch of other stuff besides.  It's very helpful for the aspiring Emacs enthusiast.&lt;br /&gt;
&lt;br /&gt;
* M-x doctor :  Sometimes you just have to talk out your problems with a sympathetic program.&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
&lt;br /&gt;
* M-/ :  Autocompletion.  Emacs looks through the buffer for possible completions of whatever you're typing at the moment.  For example,  if you've typed &amp;quot;rotweiler&amp;quot; at some point previous,  and wish to reuse the word,  you could type rot'''M-/''' and it will fill in the &amp;quot;weiler&amp;quot;.  Of course,  it may also come up with &amp;quot;rotation&amp;quot; if it sees that word as well.  Can be very handy.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=2712</id>
		<title>Emacs keystrokes</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Emacs_keystrokes&amp;diff=2712"/>
		<updated>2004-03-07T07:29:01Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Still a work in progress.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Emacs''' tends to work its text-editing wonders through a combination of indirection and Lisp-jitsu.  When you type a key--'k', for instance--Emacs doesn't simply paint the character on the screen like a lazier text editor would.  Instead,  it takes the keystroke and sees what sort of commands are &amp;quot;bound&amp;quot; to it.  In the case of 'k',  the command it issues is a straightforward &amp;quot;insert me where the cursor is.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
At this point,  no advantage is apparent.  But the commands bound to a keystroke can be arbitrarily complex.  For example,  when Emacs is running in C [[Emacs_modes|mode]],  pressing the &amp;lt;TAB&amp;gt; key doesn't indent everything after the cursor by a single tabspace.  Instead,  it analyzes the code that you are writing,  and indents the entire line to whatever depth appears to make the most sense.&lt;br /&gt;
&lt;br /&gt;
There are many more examples,  but the upshot is that if you're willing to learn the Emacs way,  there are many tips and tricks to pick up that can make it a very productive environment.  Just be warned that,  before it's over,  you're going to be bending and contorting your fingers in ways you never imagined.&lt;br /&gt;
&lt;br /&gt;
==Basic Keystrokes==&lt;br /&gt;
&lt;br /&gt;
The keystroke &amp;lt;CTRL&amp;gt;+X is generally represented as C-x,  while &amp;lt;META&amp;gt;-v would be displayed with the shorthand M-v.  The meta key varies from system to system,  but is usually the &amp;lt;ALT&amp;gt; key,  or sometimes the &amp;lt;ESC&amp;gt; key.&lt;br /&gt;
&lt;br /&gt;
If two commands are separated by a comma (C-p, C-n for example) then they are separate commands.  Otherwise they are part of the same command.  For example,  C-x C-s means you type &amp;lt;CTRL&amp;gt;-x,  then &amp;lt;CTRL&amp;gt;-s to execute the command.&lt;br /&gt;
&lt;br /&gt;
===Navigation===&lt;br /&gt;
&lt;br /&gt;
* C-p, C-n, C-f, C-b :  Functionally equivalent to the arrow buttons. C-p moves the cursor up one line,  C-n moves it down a line,  C-f moves one space forward,  and C-b moves one space backwards.  It may seem silly to have these commands when the arrow keys are right there.  But once you're used to them [and they do take some getting used to] you may decide that 'right there' just isn't close enough,  and it's nice to be able to navigate without moving your hands away from normal typing position.&lt;br /&gt;
&lt;br /&gt;
* C-a, C-e :  C-a moves to the beginning of a line,  while C-e moves to the end of the line.&lt;br /&gt;
&lt;br /&gt;
''Note: These keystrokes aren't specific to Emacs.  For example,  all six work on the command line,  and they also work inside forms on the web browser I'm using to type this.  You may find it advantageous to try and make them second nature.''&lt;br /&gt;
&lt;br /&gt;
* C-l :  Centers your view of the buffer so that the cursor is in the middle of the screen.&lt;br /&gt;
&lt;br /&gt;
* C-v, M-v :  Move the cursor up and down by half a page of text at a time.&lt;br /&gt;
&lt;br /&gt;
* M-&amp;lt;, M-&amp;gt; :  Moves the cursor to the beginning and end of the entire document.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Files and Buffers===&lt;br /&gt;
&lt;br /&gt;
* C-x C-s :&lt;br /&gt;
&lt;br /&gt;
* C-x f : &lt;br /&gt;
&lt;br /&gt;
* C-x 1, C-x 2, C-x 3 :  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous===&lt;br /&gt;
&lt;br /&gt;
* M-/ :  Autocompletion.  Emacs looks through the buffer for possible completions of whatever you're typing at the moment.  For example,  if you've typed &amp;quot;rotweiler&amp;quot; at some point previous,  and wish to reuse the word,  you could type rot'''M-/''' and it will fill in the &amp;quot;weiler&amp;quot;.  Of course,  it may also come up with &amp;quot;rotation&amp;quot; if it sees that word as well.  Can be very handy.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=User:Chalupamaster92&amp;diff=2704</id>
		<title>User:Chalupamaster92</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=User:Chalupamaster92&amp;diff=2704"/>
		<updated>2004-03-07T06:39:28Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I suppose you wonder why I call myself the master of the chalupa.  Frankly,  so do I.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
	<entry>
		<id>https://wiki.linuxquestions.org/index.php?title=Web_browser&amp;diff=2688</id>
		<title>Web browser</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxquestions.org/index.php?title=Web_browser&amp;diff=2688"/>
		<updated>2004-03-07T06:32:43Z</updated>

		<summary type="html">&lt;p&gt;Chalupamaster92: Added links to specific browsers.  How does one indent?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''This article is a [[LinuxQuestions.org_Wiki:stub_articles|stub]] and needs to be finished. [[LinuxQuestions.org_Wiki:plunging_forward|Plunge forward]] and [[LinuxQuestions.org_Wiki:How_to_edit_a_page|help it grow]] !''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A '''web browser''' is essentially an engine that converts markup (primarily [[HTML]]) into a representation according to the rules of the markup. However, browsers must also handle an array of other demands from an increasingly complex web, which is often done with the help of [[plugins]] such as [[Flash Player(s)]].&lt;br /&gt;
&lt;br /&gt;
For some hints on setting up web browsers, look at [[Browsing tasks]].&lt;br /&gt;
&lt;br /&gt;
Links to specific browsers:&lt;br /&gt;
&lt;br /&gt;
[[Galeon]] :  a web browser for [[Gnome]].  Based on the [[Gecko]] renderer.&lt;br /&gt;
&lt;br /&gt;
[[Konqueror]] : a web browser for [[KDE]].&lt;br /&gt;
&lt;br /&gt;
[[Lynx]] :  text-only web browser for command-line purists.&lt;br /&gt;
&lt;br /&gt;
[[Netscape]] / [[Mozilla]] / [[Firefox]] : A very popular family of browsers.&lt;br /&gt;
&lt;br /&gt;
[[Opera]] : A popular,  ad-supported web browser.  Adherents say it's the fastest browser around.&lt;br /&gt;
&lt;br /&gt;
[[Emacs]] : No,  really.  It's true.&lt;/div&gt;</summary>
		<author><name>Chalupamaster92</name></author>
	</entry>
</feed>