Search This Blog

Loading...

5.31.2009

Cool programs for Windows, most of which free ( revised )

Cool programs for Windows, most of which free ( revised )

Browsing


Opera - simply the best browser on the planet


firefox the most extensible browser

Safari - Apple like quality for Windows


Google Chrome - fast , reliable and stable browser from Google




izarc - the best zipper





Process Explorer - shows resources usage per running process on Windows



Google Earth

Picasa - the best free picture viewer , organizer




Mozilla Thunderbird








Foxit Reader - much faster pdf reader



Textpad - the best text editor for Windows



smstoolpack - create CRUD for sql server



GreenShot



Open diff - tool for comparing sql server 2005 databases



Skype - the best client for Internet and Video Telephony



NSIS - the best open source Windows installer maker



And the time plugin



Gears -- edit online documents offline



Free youtube to ipod converter -- get mp4 files easily to your phone



Defragler - Disk Defragment utility



DvdDecrypter - the best DVD free ripper



ArsClip remembers your clibboard stuff - Hint , Ctrl + Shift + Z , 2



colorpic - Color to hex utility



Expresso - a GUI tool for building and verifying Regular Expressions


a flv file player
Python - for cool scripts and programming



STARUML - the best open source UML editor

Infrarecorder - free CD / DVD burner

Paint.Net - freeware image editor



putty


winscp


Multiline Search and Replace utility program


Google Gears - use Gmail offline


HijackThis

tortoise svn - a stable gui and command line to subversion for Windows


slik svn - the command line tools for svn for windows


Perl for Windows

5.29.2009

Understanding “Set based” and “Procedural” approaches in SQL

Nice article by M.M.Al-Farooque Shubho




use Northwind


go

--select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='Products'
--Declare the Table variable 
DECLARE @Elements TABLE
(
        Number INT IDENTITY(1,1), --Auto incrementing Identity column
        ProductName VARCHAR(300) --The string value
)

--Decalre a variable to remember the position of the current delimiter
DECLARE @CurrentDelimiterPositionVar INT 

--Decalre a variable to remember the number of rows in the table
DECLARE @Count INT

--Populate the TABLE variable using some logic
INSERT INTO @Elements SELECT ProductName FROM dbo.Products

--Initialize the looper variable
SET @CurrentDelimiterPositionVar = 1

--Determine the number of rows in the Table
SELECT @Count=max(Number) from @Elements

--A variable to hold the currently selected value from the table
DECLARE @CurrentValue varchar(300);

--Loop through until all row processing is done
WHILE @CurrentDelimiterPositionVar <= @Count

BEGIN
    --Load current value from the Table
    SELECT @CurrentValue = ProductName FROM @Elements WHERE Number = @CurrentDelimiterPositionVar
    --Process the current value
    print @CurrentValue
    --Increment loop counter
    SET @CurrentDelimiterPositionVar = @CurrentDelimiterPositionVar + 1;
END

how-to reconfigure sql server 2005 / 2008



-- view THE CURRENT CONFIGURATION 
 EXEC SP_CONFIGURE;
-- COPY PASTE THE DESIRED VALUE FOR EXAMPLE
--ENABLE Ole Automation Procedures
 EXECUTE sp_configure 'Ole Automation Procedures', '1' 
 RECONFIGURE WITH OVERRIDE 
 EXEC SP_CONFIGURE 'show advanced option', '1'; 
 --SHOW THE UPDATED CONFIGURATION 
 EXEC SP_CONFIGURE;


-- You will get something like this :
access check cache bucket count 0 16384 0 0
access check cache quota 0 2147483647 0 0
Ad Hoc Distributed Queries 0 1 0 0
affinity I/O mask -2147483648 2147483647 0 0
affinity mask -2147483648 2147483647 0 0
Agent XPs 0 1 1 1
allow updates 0 1 0 0
awe enabled 0 1 0 0
blocked process threshold (s) 0 86400 0 0
c2 audit mode 0 1 0 0
clr enabled 0 1 0 0
cost threshold for parallelism 0 32767 5 5
cross db ownership chaining 0 1 0 0
cursor threshold -1 2147483647 -1 -1
Database Mail XPs 0 1 0 0
default full-text language 0 2147483647 1033 1033
default language 0 9999 0 0
default trace enabled 0 1 1 1
disallow results from triggers 0 1 0 0
filestream access level 0 2 2 2
fill factor (%) 0 100 0 0
ft crawl bandwidth (max) 0 32767 100 100
ft crawl bandwidth (min) 0 32767 0 0
ft notify bandwidth (max) 0 32767 100 100
ft notify bandwidth (min) 0 32767 0 0
index create memory (KB) 704 2147483647 0 0
in-doubt xact resolution 0 2 0 0
lightweight pooling 0 1 0 0
locks 5000 2147483647 0 0
max degree of parallelism 0 64 0 0
max full-text crawl range 0 256 4 4
max server memory (MB) 16 2147483647 2147483647 2147483647
max text repl size (B) -1 2147483647 65536 65536
max worker threads 128 32767 0 0
media retention 0 365 0 0
min memory per query (KB) 512 2147483647 1024 1024
min server memory (MB) 0 2147483647 0 0
nested triggers 0 1 1 1
network packet size (B) 512 32767 4096 4096
Ole Automation Procedures 0 1 1 1
open objects 0 2147483647 0 0
optimize for ad hoc workloads 0 1 0 0
PH timeout (s) 1 3600 60 60
precompute rank 0 1 0 0
priority boost 0 1 0 0
query governor cost limit 0 2147483647 0 0
query wait (s) -1 2147483647 -1 -1
recovery interval (min) 0 32767 0 0
remote access 0 1 1 1
remote admin connections 0 1 1 0
remote login timeout (s) 0 2147483647 20 20
remote proc trans 0 1 0 0
remote query timeout (s) 0 2147483647 600 600
Replication XPs 0 1 0 0
scan for startup procs 0 1 0 0
server trigger recursion 0 1 1 1
set working set size 0 1 0 0
show advanced options 0 1 1 1
SMO and DMO XPs 0 1 1 1
SQL Mail XPs 0 1 0 0
transform noise words 0 1 0 0
two digit year cutoff 1753 9999 2049 2049
user connections 0 32767 0 0
user options 0 32767 0 0
xp_cmdshell 0 1 0 0

5.28.2009

cmd cheat sheet ( revised )

::cmd cheat sheet ( revised )
:: FOLLOW THE SYNTAX TO MAKE COPY PASTE EASIER , USE CAPITAL LETTERS FOR COMMENTS

RUNAS /profile /user:luser0007 " shutdown.exe -r -f -m \\4FID04341"

:: execute command remotely not working
LSrunas /user:luser0007 /password:company007 /domain:%computername% /command:"reboot -r -f -m \\1USD007072" /runpath:"C:\Temp\FOLDER\bin"


psexec -u user0007 -p pass "shutdown.exe -r -f -m \\1US007070 "
psexec -u user0007 -p pass "shutdown.exe -r -f -m \\I88007374"


LSrunas /user:luser0007 /password:company007 /domain:%computername% /command:" updateTRN.bat \\1USD0070071" /runpath:"C:\Temp\Folder\bin"

:: ADDING USER WITH PASS
net user luser0007 company007 /ADD

:: ADDING USER TO THE LOCALGROUP ADMINISTRATORS
net localgroup "Administrators" luser0007 /add

:: ADDING VANTAGE USER IDENTIFIED BY company007 TO THE LOCALGROUP ADMINISTRATORS
net user vantage company007 /add

:: ADDING USER TO THE LOCALGROUP ADMINISTRATORS
net localgroup "Administrators" vantage /add

:: RESTART THE COMPUTER AND FORCE RUNNING APPLICATIONS TO CLOSE WITHOUT
shutdown -r -f -t 00
:: OPENS THE EXPLORER IN THE C:\TEMP FOLDER MAXIMIZED - USE THE /MIN OPTION TO GET

:: THE WINDOWS STARTED MINIMIZED
cmd /c start /max Explorer /e , "C:\Temp"

:: GET A NICE PROMPT
set prompt=$P$S$S$t$_$_$S$S

:: RUN THE REGEDIT AS A SPECIFIC USER
RUNAS /profile /user:luser0007 regedit | sanur /i C:\utils\psts.txt

:: REBOOT AGENT REMOTELY USING THE RUNAS COMMAND - WORKS !!!!
:: START A CMD PROMPT UNDER THE luser0007 user

RUNAS /profile /user:luser0007 cmd.exe | sanur /i C:\utils\psts.txt
RUNAS /profile /user:luser0007 " shutdown.exe -f -r -t 00 -m \\ID88007374"

::WORKS ALSO NEEDS SANUR http://www.commandline.co.uk/sanur_unsupported/index.html
RUNAS /profile /user:luser0007 " shutdown.exe /f /r /t 00 /m \\2SGD00070" | sanur /i C:\utils\psts.txt

runas /u:domain\username program.exe | sanur /i C:\utils\psts.txt
:: GET ALL THE INFORMATION RELATED TO NETWORKING ON A WINDDOWS STATION
ipconfig /all

:: USE OF FOR /F
FOR /F "usebackq delims=\" %i IN (`DIR /AD /B`) DO FIND /I "TEMP"
:: LIST THE RUNNING APPLICATIONS
tasklist /v

:: FIND SOMETHING IN A COMMAND
ipconfig /all | find /i "Ip Address"

:: EXPORT AND PARSE VALUE FROM THE REGISTRY
setlocal
if exist tmp.reg del /q tmp.reg
reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" tmp.reg
for /f "tokens=2 delims==" %%a in ('find /i "username" tmp.reg') do set line=%%a&call :strip
endlocal
goto :EOF
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:strip
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set usr=%line:"=%
echo/the user is %usr%>>%computername%.txt
del /q tmp.reg
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: ANOTHER WAY OF EXPORTING KEYS FROM THE REGISTRY
regedit /e c:\zzz\reg.reg "HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer"

:: COUNT THE NUMBER OF SPECIFIC TYPE OF FILES ARE THEY IN A SPECIFIED DIRECTORY
for /f "tokens=* delims=" %%i in ('dir C:\Temp\Folder4.2\scripts\*.* /b /a-d ^| find /i /c "mdb"') do @echo num of scripts is %%i>>"%cd%\%computername%.txt"

:: LABEL EACH FILE IN A DIRECTORY
for /f "tokens=* delims=" %%i in ('dir /b C:\temp\Folder4.2\scripts\*.mdb') do @echo installed script %%i >>"%cd%\%computername%.txt"

:: START EXPLORER
for /f "tokens=* delims=" %%i in ('type DrillDownAllNames.txt') do (
)
:: CHANGE DRIVE AND DIRECTORY AT THE SAME TIME.
cd /d %ProgramFiles%
:: COMMAND SEPERATOR. EXECUTES TWO (OR MORE) COMMANDS ON ONE LINE.
dir & path
SAME, BUT THE ECHO COMMAND WILL ONLY BE EXECUTED WHEN THE COPY WAS SUCCESFUL.
copy a b && echo
SAME, ONLY IF UNSUCCESFUL.
copy a b || goto error

GOTO THE ERRORLABEL, IF THE PREVIOUS COMMAND EXITTED WITH AN ERRORLEVEL BIGGER THAN ZERO.
)


:: HOW TO IMPORT SILENTLY A REGISTRY FROM A FILE
reg import /s C:\temp\the_name_of_the_file.reg
reg import /s C:\temp\Folder\bin\PcAnyStealth.reg
:: ANOTHERWAYS TROUGH the regedit.exe
cmd /c %SystemRoot%\Regedit.exe /s thePaht\TheFile.reg

:: HOW TO EXPORT VALUES FROM THE REGISTRY INTO A FILE

:: HOW TO BACK UP THE WHOLE REGISTRY THROUGH THE GUI IN WINDOWS XP
http://support.microsoft.com/?kbid=322756


:: DELETING KEYS OR VALUES USING A REG FILE
:: IT IS ALSO POSSIBLE TO DELETE KEYS AND VALUES USING REG FILES. TO DELETE A KEY START BY :: USING THE SAME FORMAT AS THE THE REG FILE ABOVE, BUT PLACE A "-" SYMBOL IN FRONT OF THE :: :: KEY NAME YOU WANT TO DELETE. FOR EXAMPLE TO DELETE THE :: :: [HKEY_LOCAL_MACHINE\SYSTEM\SETUP] KEY THE REG FILE WOULD LOOK LIKE THIS:


REGEDIT4

[-HKEY_LOCAL_MACHINE\SYSTEM\SETUP]


regedit.exe [options] [filename] [regpath]
[filename] Import .reg file into the registry
/s [filename] Silent import, i.e. hide confirmation box when importing files
/e [filename] [regpath] Export the registry to [filename] starting at [regpath]
e.g. regedit /e file.reg HKEY_USERS\.DEFAULT
/L:system Specify the location of the system.dat to use
/R:user Specify the location of the user.dat to use



:: TO EXPORT A KNOW REGISTRY KEY FROM THE REGISTRY
reg export "HKEY_LOCAL_MACHINE\SYSTEM\SETUP" filename.reg


:: IF A FILE OR FOLDER EXISTS (SPELLED WITHOUT THE LETTER S ON THE END). THE PARENTHESES
:: GROUP THE COMMANDS OVER THE LINEBREAK (¶ DENOTES A LINEBREAK).

if errorlevel 1 goto error
if exist "file.log"
echo Log exists
goto end
:: ESCAPE CHARACTER TO USE REDIRECT/PIPE CHARACTERS IS THE CARET (^)
echo a -^> b
:: REDIRECTS OUTPUT (INCLUDING ERROR MESSAGES) TO FILE.LOG
command > file.log 2>&1
:: COMMAND SAME THING (BUT IT APPENDS). IN THIS WAY, YOUR BATCH FILES LOOK CLEANER.
>> file.log 2>&1
PUT MESSAGES IN STDIN.LOG AND ERROR MESSAGES IN STDERR.LOG.
command 1> stdin.log 2> stderr.log

start /wait regedit /s file.reg
:: Will ensure when the batch-file continues, the merge operation has completed.
:: regsvr32 /s file.dll Registers a COM DLL without dialog boxes (no report via %errorlevel% of
:: success/failure). Use /s /u for unregistering. :: QUIT'S THE CURRENT BATCH-FILE
:: (ONLY WORKS UNDER NT4 WHEN COMMAND EXTENTIONS ARE ENABLED, WHICH IS NOT THE DEFAULT).
goto :EOF
THE BATCH FILE'S VERSION OF GOSUB. END THE "SUBROUTINE" WITH GOTO :EOF INSTEAD OF RETURN.
ECHO LOG >> %~N0.LOG IN A BATCH FILE: TRICK TO APPEND A MESSAGE TO A LOG WITH THE SAME NAME AS THE BATCH-FILE, BUT WITH AN OTHER EXTENSION.
call :subroutine
notepad %* In a batch file: replaced by all the arguments in a batch file.

:: UPDATES FOR
http://sysman.Company.com/wsu


C:\winnt\system32\drivers\etc\
147.243.4.137 saeperfp0007


:: SEE THE CURRENT STATUS OF THE ACCOUNTS
net accounts


:: SET THE PASSWORDS TO NEVER EXPIRE ON THE LOCAL COMPUTER
net accounts /maxpwage:unlimited /%computername%
http://server/cvshare/fxwin.ini
:: ADDS LOCAL USER NO PASSWORD NOTHING DO NOT USE
net user luser0007 password /ADD /%computername%

NET USER luser0007 company007 /ADD /expires: never /times: all /%computername%


:: ADDS THE USERS TO THE ADMINISTRATOR GROUP
net localgroup "Administrators" luser0007 /add
net localgroup "Administrators" user0007 /add
net localgroup "Administrators" user /add

RUNAS /profile /user:user0007 REGEDIT
RUNAS /profile /user:luser0007 REGEDIT
RUNAS /profile /user:user REGEDIT
RUNAS /profile /user:WKS_Admin REGEDIT


:: RUN CONSOLE ROOT
RUNAS /profile /user:luser0007 mmc
psexec -u luser0007 -p company007 cmd /c regedit.exe
psexec -u user0007 -p perfor2mance3 cmd /c regedit.exe
psexec -u vantage -p company007 cmd /c regedit.exe

:: FIND AND REPLACE STRING IN TEXT FILE USING GSAR
gsar "-sIMMIDIATERUN:0611" "-rIMMIDIATERUN:0610" -o "C:\Temp\Folder4.2\settings.txt"

:: ACCESS EACH ROW FROM THE FILE
for /f "tokens=* delims=" %%a in ('more/e +0 ^<"%cd%\%computername%.txt"') do :: COMPARING STRINGS @echo off set VAR=before if "%VAR%" == "before" ( echo %var% set VAR=after echo %var% pause if "!VAR!" == "after" @echo If you see this, it worked ) echo %var% pause :: OPEN THE SERVICES FROM THE COMMAND PROMPT %SystemRoot%\system32\services.msc /s :: THE USE OF THE SET COMMAND set agent = something :: WRONG !!!! AVOID SPACES BEFORE = AFTER IT AND AFTER THE RVALUE IT TAKES THOSE ALSO !!!!!! ::ALWAYS USE THE NET USE COMMAND IF YOU WANT TO USE NETWORK RESOURCES FROM CMD net use "\\esdfs0007\dfs\ESGROUPS026\perfect\Maintainence\Documents\deployment\Temporary_Agent_Logs" ::USE REDIRECTING OF ERRORS THIS WAYS copy file1 file2 2>errors.txt
errors.txt

:: CHANGE THE SETTINGS IMMIDIATERUN FROM THE COMMAND LINE
gsar "-sIMMIDIATERUN:0611" "-rIMMIDIATERUN:0610" -o "C:\Temp\Folder4.2\settings.txt"
:: CHANGE THE REBOOOTEVERYCYCLE FROM 1 TO 0
gsar "-sREBOOTEVERYCYCLE:0611" "-rREBOOTEVERYCYCLE:0610" -o "C:\Temp\Folder4.2\settings.txt"
:: CHANGE THE TIMEOUT FROM 30 TO 20
gsar "-sQARUN_TIMEOUT:06130" "-rQARUN_TIMEOUT06120" -o "C:\Temp\Folder4.2\settings.txt"

:: WE DO NOT WANT TO MESS WITH SCRIPTS
IF NOT DEFINED CMDWindow Set CMDWindow=1&Start "GetAndSendInfo" /MIN %0&Goto :EOF
:: PUT THE CODE HERE
exit
:: append a new folder to the path of a
AddPath -s -n -v Path "C:\Program Files\BEA Systems\TUXEDO"

:: DLL LINKING using the regsvr32 command SILENTLY
regsvr32 /s DIV_ExtMESClient.dll

:: runthe registry as a different user


:: using runas command
LSrunas /user:luser0007 /password:company007 /domain:%computername% /command:"REGEDIT" /runpath:"%cd%"
:: normal
RUNAS /profile /user:luser0007 REGEDIT

:: PSEXEC
:: In order to get the psexec working the following commands should succeed
net use \\target\Admin$ /user:Administrator
dir \\target\Admin$
net use \\target\Admin$ /delete
:: (only disconnects, does not delete anything.)

:: reboot fast station with the shutdown utility
C:\Temp\Folder\bin\shutdown.exe -s reboot -f -m "The station will reboot in 3 seconds" -l 3 -c
shutdown -f -r -t 00



::=========================================================
:: using bmail
::=========================================================
:: SETTING TO THE E-MAIL TO WHOM WE ARE GOING TO SEND THE E-MAIL
::=========================================================
set mailadd= ext-yordan.georgiev^@Company.com



::CONTCATENATE ANY ERRORS TO THE END OF THE LOG
echo errors in the logging process are listed bellow: >>"%cd%\%computername%.txt"
for /f "delims=" %%a in ('more/e +0 ^<"%cd%\error_log_%computername%.txt"') do echo/%%a>>"%cd%\%computername%.txt"


:: WE USE THE BMAIL.EXE UTILITY TO SEND OURSELF AN E-MAIL CONTAINING THE TEXT FILE
:: ALTERNATIVE SMTP MIGHT BE esebe107.NOE.Company.com, UNCOMMENT THE NEXT LINE FOR ALTERN
:: cmd /c bmail -s esebe107.NOE.Company.com -m %computername%.txt -t %mailadd% -a %computername% -h
bmail -s smtp.Company.com -m %computername%.txt -t ext-yordan.georgiev@Company.com -a %computername% -h

:: eof using bmail
::=========================================================
::=========================================================
+358 xx YYYYYY @ smsgateway.Company.com
::=========================================================
::HOW TO SEND SMS IN Company WITH BMAL
::=========================================================


::=========================================================
:: edit the hosts file
::=========================================================
echo 147.243.4.137 serverName >> C:\winnt\system32\drivers\etc\hosts
::=========================================================


::=========================================================
::=======================================================
:: START A MINIMIZED BATCH WINDOW
::=======================================================
@echo off
IF NOT DEFINED CVRestart Set CVRestart=1&Start "Minimized" /MIN %0&Goto :EOF

exit
::=======================================================


::=======================================================
:: USAGE OF THE WHERE COMMAND ::WHERE [/R dir] [/Q] [/F] [/T] pattern...
::=======================================================
WHERE /R "\\SERVER\SHAREFOLDER" *stringFoFind*
::=======================================================
::get the mac address of an workstatioin
getMac



RUNAS /profile /user:user0007 "COMPMGMT.MSC " | sanur /i C:\utils\psts.txt
RUNAS /profile /user:luser0007 "regedit " | sanur company007
:: STOP A SERVICE
net stop "PCAnywhere Host Service"

:: STOP AN WINDOWS SERVICE IN MICROSOFTS WAY
sc \\servername stop schedule
:: WITH PSINTERNALS
psservice \\computername -u UserName-p Password stop "PCAnywhere Host Service"
psservice \\1USD007070 -u luser0007 -p Password company007 stop "PCAnywhere Host Service"


::CERTIFICATE MANAGER
certmgr.msc

::command-line that reverses the whole file by lines
perl -e 'print reverse ' file1 file2 file3 ….


:: How do I concatenate files into one file overwriting previous existing one?

copy /b /y *.txt APMDeployment.html

:: If you want separations between the files,
:: try something like this...

@echo off
if .%1==.Loop goto process
> output.fil rem
for %%a in (*.txt) do call %0 Loop %%a
goto end
:process
>>output.fil echo.
>>output.fil echo ----------- File %2 -----------
>>output.fil type %2
:end

net use \\4FIN04806\Temp\tmp "0026plapla" /USER: " yogeorgi@NOE.Company.com"
NET USE W: \\4FIN04806\Temp /Persistent:No


:: COPY FILES RECURSIVELY TO THE CURRENT DIRECTORY
:: USES exec.bat by Fred Stluka
exec /s *pdrs*jpg do xcopy /s /m /f

:: SETTING TITLE AND COLOR AND FOR CMD
cmd.exe /k cd c:\Temp && color fc && title ***** Admin console *****

:: DELETE FILES CONTAINING STRING ON REMOTE COMPUTER
:: uses srp.exe see start remote process
cmd /c srp workstation cmd /c del /q C:\Temp\Folder\Logs\pics\*20060*

:: Fast search the directory for filename

::Windows fast directory search from WinLogo + R
cmd /c "dir C:\temp\Company\Product\THEORY\*toFind* /s /b>list.txt&list.txt "

:: open all textpad files in a directory
for /f "tokens=* delims=" %%i in ('dir /b /s c:\TEMP\Company\*.txt') do cmd /c start /max textpad %%i

:: START NERO START SMART AS THE ROOT USER
RUNAS /profile /user:root "C:\Program Files\Nero\Nero 7\Nero StartSmart\NeroStartSmart.exe"

::how to view the history in cmd
doskey /history

:: FIND A FILE BY PATH - START - RUN - CMD.EXE , D:\ , CD D:\LIBS
for /f "tokens=*" %i in ('dir *Utils*.dll /s /b') do @echo off&echo "%i" >>list.
txt&list.txt

Start - Run - utils (revised)

Control Panel
Windows utility and applications
Disk management
Connection management
Miscellaneous commands

Control Panel



CONTROL MOUSE or MAIN.CPL --- opens mouse properties
CONTROL USERPASSWORDS --- opens User Accounts editor
CONTROL USERPASSWORDS2 or NETPLWIZ --- User account access restrictions
CONTROL PRINTERS --- opens faxes and printers available
CONTROL --- opens the control panel window
CONTROL ADMINTOOLS --- opens the administrative tools
CONTROL KEYBOARD --- opens keyboard properties
CONTROL COLOUR --- opens display properties.Appearance tab
CONTROL FOLDERS --- opens folder options
CONTROL FONTS --- opens font policy management
CONTROL INTERNATIONAL or INTL.CPL --- opens Regional and Language option
APPWIZ.CPL --- opens Add or Remove programs utility tool
OPTIONALFEATURES --- opens Add or Remove Windows component utility
DESK.CPL --- opens display properties. Themes tab
HDWWIZ.CPL --- opens add hardware wizard
IRPROPS.CPL --- infrared utility tool
JOY.CP --- opens game controllers settings
MMSYS.CPL --- opens Sound and Audio device Properties. Volume tab
SYSDM.CPL --- opens System properties
TELEPHON.CPL --- Opens phone and Modem options
TIMEDATE.CPL --- Date and Time properties
WSCUI.CPL --- opens Windows Security Center
ACCESS.CPL --- opens Accessibility Options
WUAUCPL.CPL --- opens Automatic Updates
POWERCFG.CPL --- opens Power Options Properties
AZMAN.MSC --- opens authorisation management utility tool
CERTMGR.MSC --- opens certificate management tool
COMPMGMT.MSC --- opens the Computer management tool
COMEXP.MSC or DCOMCNFG --- opens the Computer Services management tool
DEVMGMT.MSC --- opens Device Manager
EVENTVWR or EVENTVWR.MSC --- opens Event Viewer
FSMGMT.MSC --- opens Shared Folders
NAPCLCFG.MSC --- NAP Client configuration utility tool
SERVICES.MSC --- opens Service manager
TASKSCHD.MSC or CONTROL SCHEDTASKS --- opens Schedule Tasks manager
GPEDIT.MSC --- opens Group Policy utility tool
LUSRMGR.MSC --- opens Local Users and Groups
SECPOL.MSC --- opens local security settings
CIADV.MSC --- opens indexing service
NTMSMGR.MSC --- removable storage manager
NTMSOPRQ.MSC --- removable storage operator requests
WMIMGMT.MSC --- opens (WMI) Window Management Instrumentation
PERFMON or PERFMON.MSC --- opens the Performance monitor
MMC --- opens empty Console
MDSCHED --- opens memory diagnostics tools
DXDIAG --- opens DirectX diagnostics tools
ODBCAD32 --- opens ODBC Data source Administrator
REGEDIT or REGEDT32 --- opens Registry Editor
DRWTSN32 --- opens Dr. Watson
VERIFIER --- opens Driver Verifier Manager
CLICONFG --- opens SQL Server Client Network Utility
UTILMAN --- opens Utility Manager
COLORCPL --- opens color management
CREDWIZ --- back up and recovery tool for user passwords
MOBSYNC --- opens Synchronization center
MSCONFIG --- opens System Configuration Utility
SYSEDIT --- opens System Configuration Editor
SYSKEY --- Windows Account Database Security management


Windows utility and applications



EPLORER --- Opens windows Explorer
IEXPLORER --- Opens Internet explorer
WAB --- opens Contacts
CHARMAP --- opens Character Map
WRITE --- opens WordPad
NOTEPAD --- opens Notepad
CALC --- opens Calculator
CLIPBRD --- opens Clipbook Viewer
WINCHAT --- opens Microsoft Chat Interface
SOUNDRECORDER --- opens sound recording tool
DVDPLAY --- run CD or DVD
WMPLAYER --- opens Windows Media Player
MOVIEMK --- Opens untitled Windows Movie Maker
OSK --- opens on-screen Keyboard
MAGNIFY --- opens Magnifier
WINCAL --- opens Calendar
DIALER --- opens phone Dialer
EUDCEDIT --- opens Private Character Editor
NDVOL --- opens the mixer volume
RSTRUI opens Tool System Restore (For Vista only)
% WINDIR% \ SYSTEM32 \ RESTORE \ rstrui.exe opens Tool System Restore (for XP only).
MSINFO32 --- Opens the System Information
MRT --- launches the utility removal of malware.
Taskmgr --- Opens the Windows Task Manager
CMD --- opens a command prompt
MIGWIZ --- Opens the tool for transferring files and settings from Windows (Vista only)
Migwiz.exe --- Opens the tool for transferring files and settings from Windows (for XP only)
SIDEBAR --- Open the Windows (Vista only)
Sigverif --- Opens the tool for verification of signatures of files
Winver opens the window for your Windows version
FSQUIRT --- Bluetooth Transfer Wizard
IExpress opens the wizard for creating self-extracting archives.
MBLCTR --- opens the mobility center (Windows Vista only)
MSRA --- Opens the Windows Remote Assistance
Mstsc --- opens the tool connection Remote Desktop
MSDT --- opens the diagnostic tools and support Microsoft
WERCON --- opens the reporting tool and solutions to problems (for Vista only)
WINDOWSANYTIMEUPGRADE --- Enables the upgrade of Windows Vista
WINWORD opens Word (if installed)
PRINTBRMUI opens migration wizard printer (Vista only)

Disk management

DISKMGMT.MSC --- opens disk management utility
CLEANMGR --- opens disk drive clean up utility
DFRG.MSC --- opens disk defragmenter
CHKDSK --- complete analysis of disk partition
DISKPART --- disk partitioning tool

Connection management


IPCONFIG --- list the configuration of IP addresses on your PC (for more information type IPCONFIG/? in the CMD menu)
INETCPL.CPL --- opens internet properties
FIREWALL.CPL --- opens windows firewall
NETSETUP.CPL --- opens network setup wizard

Miscellaneous

JAVAWS --- View the cover of JAVA software (if installed)
AC3FILTER.CPL --- Opens the properties AC3 Filter (if installed)
FIREFOX --- Mozilla launches Firefox (if installed)
NETPROJ --- allow or not connecting to a network projector (For Vista only)
LOGOFF --- closes the current session
SHUTDOWN -a -f -t 00 --- shut down Windows
SHUTDOWN -a --- the interrupt Windows shutdown
%WINDIR% or% SYSTEMROOT% opens the Windows installation
%PROGRAMFILES% --- Opens the folder where you installed other programs (Program Files)
%USERPROFILE% --- opens the profile of the user currently logged
%HOMEDRIVE% --- opens the browser on the partition or the operating system is installed
%HOMEPATH% --- opens the currently logged user C --- \ Documents and Settings \ [username]
%TEMP% --- opens the temporary folder
VSP1CLN --- deletes the cache for installation of the service pack 1 for Vista
System File Checker (Requires Windows CD if the cache is not available)
* SFC / scannow --- immediately scans all system files and repairs damaged files
* SFC / VERIFYONLY --- scans only those files system
* SFC / Scanfil = "name and file path" --- scans the specified file, and repaired if damaged
* SFC / VERIFYFILE = "name and file path" --- Scans only the file specified
* SFC / scanonce --- scans the system files on the next restart
* SFC / REVERT --- return the initial configuration (For more information, type SFC /? In the command prompt CMD

::START OFFICE APPLICATIONS FROM COMMAND LINE
EXCEL.EXE
FINDER.EXE
INFOPATH.EXE
MSACCESS.EXE
MSPUB.EXE
OIS.EXE
OUTLOOK.EXE
POWERPNT.EXE
WINWORD.EXE

:: OLDIES ( MIGHT HAVE OVERLAPPINGS WITH THOSE ABOVE )



ACCWIZ.EXE - Accessibility Wizard
CALC.EXE - Calculator
CHARMAP.EXE - Character Map
CLEANMGR.EXE - Disk Space Cleanup Manager
CLICONFG.EXE - SQL Client Configuration Utility
CLIPBRD.EXE - Clipbook Viewer
CLSPACK.EXE - Class Package Export Tool
CMD.EXE - Command Line
CMSTP.EXE - Connection Manager Profile Installer
CONTROL.EXE - Control Panel
DCOMCNFG.EXE - Component Services
DDESHARE.EXE - DDE Share
DRWATSON.EXE - Doctor Watson v1.00b
DRWTSN32.EXE - Doctor Watson Settings
DVDPLAY.EXE - DVD Player
DXDIAG.EXE - DirectX Diagnostics
EUDCEDIT.EXE - Private Character Editor
EVENTVWR.EXE - Event Viewer
EXPLORER.EXE - Windows Explorer
FREECELL.EXE - Free Cell
FXSCLNT.EXE - Fax Console
FXSCOVER.EXE - Fax Cover Page Editor
FXSEND.EXE - MS Fax Send Note Utility
IEXPRESS.EXE - IExpress 2.0
LOGOFF.EXE - System Logoff
MAGNIFY.EXE - Microsoft Magnifier
MMC.EXE - Microsoft Management Console
MOBSYNC.EXE - Microsoft Synchronization Manager
MPLAY32.EXE - Windows Media Player version 5.1
MSTSC.EXE - Remote Desktop Connection 127.0.0.1:3388
Remote Desktop Connection
NARRATOR.EXE - Microsoft Narrator
NETSETUP.EXE - Network Setup Wizard
NOTEPAD.EXE - Notepad
NSLOOKUP.EXE - NSLookup Application
NTSD.EXE - Symbolic Debugger for Windows 2000
ODBCAD32.EXE - ODBC Data Source Administrator
OSK.EXE - On Screen Keyboard
OSUNINST.EXE - Windows Uninstall Utility
PACKAGER.EXE - Object Packager
PERFMON.EXE - Performance Monitor
PROGMAN.EXE - Program Manager
RASPHONE.EXE - Remote Access Phonebook
REGEDIT.EXE - Registry Editor
REGEDT32.EXE - Registry Editor
RESET.EXE - Resets Session
RSTRUI.EXE - System Restore
RTCSHARE.EXE - RTC Application Sharing
SFC.EXE - System File Checker
SHRPUBW.EXE - Create Shared Folder
SHUTDOWN.EXE - System Shutdown
SIGVERIF.EXE - File Signature Verification
SNDREC32.EXE - Sound Recorder
SNDVOL32.EXE - Sound Volume
DIALER.EXE - Phone Dialer
HELPCTR.EXE - Help and Support

Control Panel Tools

ACCESS.CPL - Accessibility Options
APPWIZ.CPL - Add or Remove Programs
DESK.CPL - Display Properties
HDWWIZ.CPL - Add Hardware Wizard
INETCPL.CPL - Internet Explorer Properties
INTL.CPL - Regional and Language Options
JOY.CPL - Game Controllers
MAIN.CPL - Mouse Properties
MMSYS.CPL - Sounds and Audio Device Properties
NCPA.CPL - Network Connections
NUSRMGR.CPL - User Accounts
ODBCCP32.CPL - ODBC Data Source Administrator

POWERCFG.CPL - Power Options Properties
SYSDM.CPL - System Properties
TELEPHON.CPL - Phone and Modem Options
TIMEDATE.CPL - Date and Time Properties

Microsoft Management Console (MMC Snap-ins)
:: - Certificates
CERTMGR.MSC
CIADV.MSC - Indexing Service
:: COMPUTER MANAGEMENT
COMPMGMT.MSC
:: - DEVICE MANAGER
DEVMGMT.MSC
:: DISK DEFRAGMENTER
DFRG.MSC -
:: - Disk Management
DISKMGMT.MSC
:: Event Viewer
EVENTVWR.MSC

FSMGMT.MSC - Shared Folders
:: Local Users and Groups
LUSRMGR.MSC
:: REMOVABLE STORAGE
NTMSMGR.MSC
:: REMOVABLE STORAGE OPERATOR REQUESTS
NTMSOPRQ.MSC
:: PERFORMANCE MONITOR
PERFMON.MSC
:: SERVICES
SERVICES.MSC
:: WINDOWS MANAGEMENT INFRASTRUCTURE
WMIMGMT.MSC

:: CONVENTIONAL USER ACCOUNT INTERFACE
CONTROL USERPASSWORDS2 -
:: KEYBOARD PROPERTIES
control keyboard

Windows command line tools ( revised )

Windows command line tools ( revised )

This post contains links for nice command line tools for Windows , most of which are free and open source :

  • regjump

  • download regjump



    Hint: Create a directory such as D:\temp\utils and add it to your path
    Now this folder could be easily copied to an USB drive and used on many PC's you are working with ... + allmost any PC is allowed to have C:\temp folder and you could just copy the folder there ...

    Development libraries ( most of which open source)

    SOURCES:
    Nant - .Net building tool
    Log4net - a logging platform

    Subsonic - ORM , DAL





    Here a short example how-to add some libraries to your path :
    Start - Run - cmd.exe
    mkdir D:\temp\utils\

    xcopy D:\libs\build\nant-0.85\bin D:\temp\utils

    How-to search for specific dll to reference it from VS:
    Start - Run - cmd.exe
    D:\
    cd D:\libs\
    for /f "tokens=*" %i in ('dir *Utils*.dll /s /b') do @echo off&echo "%i" >>list.
    txt&list.txt

    5.27.2009

    How-to start a new web project for subsonic - beginner tutorial

    SOURCES:
    Download Subsonic

    Unpack it somewhere. Open the project . Build it.
    Search for the subsonic.dll

    @echo off&for /f "tokens=*" %i in ('dir SubSonic.dll /s /b') do echo %i >>list.t
    xt&list.txt

    In my machine is something like this:
    d:\libs\ORM\SubSonic_2.1_Final_Source\src\SubSonicCentral\Bin\SubSonic.dll

    Copy this path ( You will need it for pointing the references in the web project ...

    Start VS - Start - Run - type "devenv" - Enter

    File - new - Project - Web project

    Be sure to have the following Web.config structure ( just browse it and copy paste the needd the following lines to your web.config :



    <?xml version="1.0"?>
    <configuration>
    
    
        <configSections>
          <section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic"></section>
    <!-- Your stuff here -->
        </configSections>  
    
    
        <appSettings/>
    
    
      <SubSonicService defaultProvider="Northwind">
        <providers>
          <clear/>
          <add name="Northwind" 
               type="SubSonic.SqlDataProvider, SubSonic" 
               connectionStringName="Northwind" 
               generatedNamespace="Northwind"/>
        </providers>
      </SubSonicService>
    
      <connectionStrings>
        <add name="Northwind" connectionString="Data Source=.;Database=Northwind;Integrated Security=true;"/>
      </connectionStrings>  
        
    
        <system.web>
    
            <compilation debug="true">
    
              <buildProviders>
                <add extension=".abp" type="SubSonic.BuildProvider, SubSonic"/>
               
              </buildProviders>
              
              
              <assemblies>
    <!-- your stuff here -->
              </assemblies>
    
            </compilation>
            <authentication mode="Windows" />
     
    
          <pages>
            <controls>
    
    <!-- your stuff here -->        
    </controls>
          </pages>
    
          <httpHandlers>
             <!-- your stuff here -->
          </httpHandlers>
          <httpModules>
              <!-- your modules here -->
          </httpModules>
    
    
        </system.web>
    
        <system.codedom>
          <compilers>
               <!-- compilers stuff -->
          </compilers>
        </system.codedom>
        
     
        <system.webServer>
          <validation validateIntegratedModeConfiguration="false"/>
          <modules>
            <!-- your modules --> 
         </modules>
          <handlers>
            <!-- your handlers here --> 
         </handlers>
        </system.webServer>
    
        <runtime>
             <!-- runtime stuff here -->
        </runtime>
    
    
    </configuration>
    


    Rename the Default page of the project to QuerryWhere ( You would have to rename the inherits="_Default" and the class _Default also in the code behind...

    Now paste the following code in the code behind of the QuerryWhere page :




    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Reflection;
    using SubSonic;
    using System.Data;
    
    public partial class QuerryWhere : System.Web.UI.Page
    {
    
        private void CreateDynamicControls()
        {
    
    
            panGvHolder.Controls.Clear();
    
            Query qry = Northwind.Product.CreateQuery();
            qry.Columns.AddRange(Northwind.Product.Schema.Columns);
            qry.WHERE("UnitPrice > 15").AND("UnitsInStock < 20 ");
            //WHERE("UnitPrice > 15").AND("UnitsInStock < 30 ");
    
    
            
            using (IDataReader rdr = qry.ExecuteReader())
            {
                Response.Write("<table>");
                while (rdr.Read())
                {
                    Response.Write("<tr>");
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        Response.Write("<td>");
                        Response.Write(rdr[i].ToString() + " ");
                        Response.Write("<td>");
                    } //eof for 
                    Response.Write("</br>");
                    Response.Write("</tr>");
                }
                Response.Write("<table>");
            }
        } //eof method
    
    
        #region TemplateMethods
        protected override void OnInit(EventArgs e)
        {
        } //eof OnInit
    
    
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            CreateDynamicControls();
        } //protected override void CreateChildControls ( )
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
    
        }
    
    
        protected override object SaveViewState()
        {
            return new Pair(base.SaveViewState(), null);
        }
    
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(((Pair)savedState).First);
            EnsureChildControls();
        } //LoadViewState
    
    
    
    
    
    
    
        #endregion //TemplateMethods
    
    
        #region DisplayMethods
    
    
        #endregion //DisplayMethods
    
    
        #region ClickEventHandlers
    
        #endregion ClickEventHandlers
    
    
    
        #region Properties
        //set here page properties to use with the viewstate
        #endregion //Properties
    } //eof class 
    

    Subsonic - how-to generate select where queries



    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Reflection;
    using SubSonic;
    using System.Data;
    
    public partial class QuerryWhere : System.Web.UI.Page
    {
    
        private void CreateDynamicControls()
        {
    
    
            panGvHolder.Controls.Clear();
    
            Query qry = Northwind.Product.CreateQuery();
            qry.Columns.AddRange(Northwind.Product.Schema.Columns);
            qry.WHERE("UnitPrice > 15").AND("UnitsInStock < 20 ");
            //WHERE("UnitPrice > 15").AND("UnitsInStock < 30 ");
    
    
            
            using (IDataReader rdr = qry.ExecuteReader())
            {
                Response.Write("<table>");
                while (rdr.Read())
                {
                    Response.Write("<tr>");
                    for (int i = 0; i < rdr.FieldCount; i++)
                    {
                        Response.Write("<td>");
                        Response.Write(rdr[i].ToString() + " ");
                        Response.Write("<td>");
                    } //eof for 
                    Response.Write("</br>");
                    Response.Write("</tr>");
                }
                Response.Write("<table>");
            }
        } //eof method
    
    
        #region TemplateMethods
        protected override void OnInit(EventArgs e)
        {
        } //eof OnInit
    
    
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            CreateDynamicControls();
        } //protected override void CreateChildControls ( )
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
    
        }
    
    
        protected override object SaveViewState()
        {
            return new Pair(base.SaveViewState(), null);
        }
    
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(((Pair)savedState).First);
            EnsureChildControls();
        } //LoadViewState
    
    
    
    
    
    
    
        #endregion //TemplateMethods
    
    
        #region DisplayMethods
    
    
        #endregion //DisplayMethods
    
    
        #region ClickEventHandlers
    
        #endregion ClickEventHandlers
    
    
    
        #region Properties
        //set here page properties to use with the viewstate
        #endregion //Properties
    } //eof class 
    

    5.26.2009

    How-to get the current date and the next date in any cultures with C# ?


                        string strGuiDate = "14.03.2008";
                        CultureInfo guiCulture = new CultureInfo("fi-FI");
                        guiCulture.DateTimeFormat.DateSeparator = ".";
                        DateTime datetime = DateTime.Parse(strGuiDate, guiCulture);
                        CultureInfo dbCulture = new CultureInfo("en-US");
                        dbCulture.DateTimeFormat.DateSeparator = "-";
    
                        string strDbTime = datetime.ToString("yyyy-MM-dd");
                        logger.Debug("strDbTime is " + strDbTime);
    
                        DateTime datetime1 = datetime.AddDays(1.0);
                        string strDbTime1 = datetime1.ToString("yyyy-MM-dd");
                        logger.Debug("strDbTime1 is " + strDbTime1);

    5.24.2009

    Start - Run - utils


    Control Panel

    Windows utility and applications

    Disk management

    Connection management

    Miscellaneous commands

    Control Panel


    CONTROL: opens the control panel window

    CONTROL ADMINTOOLS: opens the administrative tools

    CONTROL KEYBOARD: opens keyboard properties

    CONTROL COLOUR: opens display properties.Appearance tab

    CONTROL FOLDERS: opens folder options

    CONTROL FONTS: opens font policy management

    CONTROL INTERNATIONAL or INTL.CPL: opens Regional and Language option

    CONTROL MOUSE or MAIN.CPL: opens mouse properties

    CONTROL USERPASSWORDS: opens User Accounts editor

    CONTROL USERPASSWORDS2 or NETPLWIZ: User account access restrictions

    CONTROL PRINTERS: opens faxes and printers available





    APPWIZ.CPL: opens Add or Remove programs utility tool

    OPTIONALFEATURES: opens Add or Remove Windows component utility

    DESK.CPL: opens display properties. Themes tab

    HDWWIZ.CPL: opens add hardware wizard

    IRPROPS.CPL: infrared utility tool

    JOY.CP: opens game controllers settings

    MMSYS.CPL: opens Sound and Audio device Properties. Volume tab

    SYSDM.CPL: opens System properties

    TELEPHON.CPL: Opens phone and Modem options

    TIMEDATE.CPL: Date and Time properties

    WSCUI.CPL: opens Windows Security Center

    ACCESS.CPL: opens Accessibility Options

    WUAUCPL.CPL: opens Automatic Updates

    POWERCFG.CPL: opens Power Options Properties



    AZMAN.MSC: opens authorisation management utility tool

    CERTMGR.MSC: opens certificate management tool

    COMPMGMT.MSC: opens the Computer management tool

    COMEXP.MSC or DCOMCNFG: opens the Computer Services management tool

    DEVMGMT.MSC: opens Device Manager

    EVENTVWR or EVENTVWR.MSC: opens Event Viewer

    FSMGMT.MSC: opens Shared Folders

    NAPCLCFG.MSC: NAP Client configuration utility tool

    SERVICES.MSC: opens Service manager

    TASKSCHD.MSC or CONTROL SCHEDTASKS: opens Schedule Tasks manager

    GPEDIT.MSC: opens Group Policy utility tool

    LUSRMGR.MSC: opens Local Users and Groups

    SECPOL.MSC: opens local security settings

    CIADV.MSC: opens indexing service

    NTMSMGR.MSC: removable storage manager

    NTMSOPRQ.MSC: removable storage operator requests

    WMIMGMT.MSC: opens (WMI) Window Management Instrumentation

    PERFMON or PERFMON.MSC: opens the Performance monitor

    MMC: opens empty Console



    MDSCHED: opens memory diagnostics tools

    DXDIAG: opens DirectX diagnostics tools

    ODBCAD32: opens ODBC Data source Administrator

    REGEDIT or REGEDT32: opens Registry Editor

    DRWTSN32: opens Dr. Watson

    VERIFIER: opens Driver Verifier Manager

    CLICONFG: opens SQL Server Client Network Utility

    UTILMAN: opens Utility Manager

    COLORCPL: opens color management

    CREDWIZ: back up and recovery tool for user passwords

    MOBSYNC: opens Synchronization center



    MSCONFIG: opens System Configuration Utility

    SYSEDIT: opens System Configuration Editor

    SYSKEY: Windows Account Database Security management

    Windows utility and applications


    EPLORER: Opens windows Explorer

    IEXPLORER: Opens Internet explorer

    WAB: opens Contacts

    CHARMAP: opens Character Map

    WRITE: opens WordPad

    NOTEPAD: opens Notepad

    CALC: opens Calculator

    CLIPBRD: opens Clipbook Viewer

    WINCHAT: opens Microsoft Chat Interface

    SOUNDRECORDER: opens sound recording tool

    DVDPLAY: run CD or DVD



    WMPLAYER: opens Windows Media Player

    MOVIEMK: Opens untitled Windows Movie Maker

    OSK: opens on-screen Keyboard

    MAGNIFY: opens Magnifier

    WINCAL: opens Calendar

    DIALER: opens phone Dialer

    EUDCEDIT: opens Private Character Editor





    NDVOL: opens the mixer volume

    RSTRUI opens Tool System Restore (For Vista only)

    % WINDIR% \ SYSTEM32 \ RESTORE \ rstrui.exe opens Tool System Restore (for XP only). Tutorial HERE

    MSINFO32: Opens the System Information

    MRT : launches the utility removal of malware. Tutorial HERE

    Taskmgr : Opens the Windows Task Manager

    CMD: opens a command prompt

    MIGWIZ: Opens the tool for transferring files and settings from Windows (Vista only)

    Migwiz.exe: Opens the tool for transferring files and settings from Windows (for XP only)

    SIDEBAR: Open the Windows (Vista only)

    Sigverif : Opens the tool for verification of signatures of files

    Winver opens the window for your Windows version

    FSQUIRT: Bluetooth Transfer Wizard

    IExpress opens the wizard for creating self-extracting archives. Tutorial HERE

    MBLCTR: opens the mobility center (Windows Vista only)

    MSRA : Opens the Windows Remote Assistance

    Mstsc : opens the tool connection Remote Desktop

    MSDT: opens the diagnostic tools and support Microsoft

    WERCON: opens the reporting tool and solutions to problems (for Vista only)

    WINDOWSANYTIMEUPGRADE: Enables the upgrade of Windows Vista

    WINWORD opens Word (if installed)

    PRINTBRMUI opens migration wizard printer (Vista only)

    Disk management


    DISKMGMT.MSC: opens disk management utility

    CLEANMGR: opens disk drive clean up utility

    DFRG.MSC: opens disk defragmenter

    CHKDSK: complete analysis of disk partition

    DISKPART: disk partitioning tool

    Connection management


    IPCONFIG: list the configuration of IP addresses on your PC (for more information type IPCONFIG/? in the CMD menu)

    INETCPL.CPL: opens internet properties

    FIREWALL.CPL: opens windows firewall

    NETSETUP.CPL: opens network setup wizard

    Miscellaneous commands


    JAVAWS: View the cover of JAVA software (if installed)

    AC3FILTER.CPL: Opens the properties AC3 Filter (if installed)

    FIREFOX: Mozilla launches Firefox (if installed)

    NETPROJ: allow or not connecting to a network projector (For Vista only)

    LOGOFF: closes the current session

    SHUTDOWN: shut down Windows

    SHUTDOWN-A: the interrupt Windows shutdown

    % WINDIR% or% SYSTEMROOT% opens the Windows installation

    % PROGRAMFILES%: Opens the folder where you installed other programs (Program Files)

    % USERPROFILE%: opens the profile of the user currently logged

    %HOMEDRIVE%: opens the browser on the partition or the operating system is installed

    % HOMEPATH%: opens the currently logged user C: \ Documents and Settings \ [username]

    % TEMP%: opens the temporary folder

    VSP1CLN: deletes the cache for installation of the service pack 1 for Vista



    System File Checker (Requires Windows CD if the cache is not available): (Tutorial here)



    * SFC / scannow: immediately scans all system files and repairs damaged files

    * SFC / VERIFYONLY: scans only those files system

    * SFC / Scanfil = "name and file path": scans the specified file, and repaired if damaged

    * SFC / VERIFYFILE = "name and file path": Scans only the file specified

    * SFC / scanonce: scans the system files on the next restart

    * SFC / REVERT: return the initial configuration (For more information, type SFC /? In the command prompt CMD.

    A new article on the CodeProject about the XGrid

    here

    Amazing how-many comments I got about the fact that the article did not have a snapshot about a simple html table rendering control with sorting and paging !!!

    Well .. there will be one in 2 hours ; ) after a finnish reinstalling all the crap ...

    Cool programs for Windows, most of which free ( revised )

    Cool programs for Windows, most of which free ( revised )
    izarc - the best zipper


    Opera - simply the best browser on the planet


    firefox the most extensible browser



    Process Explorer - shows resources usage per running process on Windows



    Google Earth

    Picasa - the best free picture viewer , organizer

    Google Chrome - fast , reliable and stable browser from Google



    Mozilla Thunderbird




    Safari - Apple like quality for Windows




    Foxit Reader - much faster pdf reader



    Textpad - the best text editor for Windows



    smstoolpack - create CRUD for sql server



    GreenShot



    Open diff - tool for comparing sql server 2005 databases



    Skype - the best client for Internet and Video Telephony



    NSIS - the best open source Windows installer maker



    And the time plugin



    Gears -- edit online documents offline



    Free youtube to ipod converter -- get mp4 files easily to your phone



    Defragler - Disk Defragment utility



    DvdDecrypter - the best DVD free ripper



    ArsClip remembers your clibboard stuff - Hint , Ctrl + Shift + Z , 2



    colorpic - Color to hex utility



    Expresso - a GUI tool for building and verifying Regular Expressions


    a flv file player
    Python - for cool scripts and programming



    STARUML - the best open source UML editor

    Infrarecorder - free CD / DVD burner

    Paint.Net - freeware image editor



    putty


    winscp


    Multiline Search and Replace utility program


    Google Gears - use Gmail offline


    HijackThis

    tortoise svn - a stable gui and command line to subversion for Windows


    slik svn - the command line tools for svn for windows

    5.22.2009

    XGrid revised


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Web.UI.HtmlControls;
    
    
    namespace Gui.Controls
    {
    
    
      [DefaultProperty ( "Text" )]
      [ToolboxData ( "<{0}:XGrid runat=server></{0}:XGrid>" )]
      public class XGrid : GridView
      {
    
    
        #region Constructor
        /// <summary>
        /// Initialises an <see cref="XGrid"/>.
        /// </summary>
        public XGrid ()
        {
        }
        #endregion
    
    
        #region Properties
    
    
    
        #region HasCustomFormatting
        /// <summary>
        /// Whether the results summary should be shown.
        /// </summary>
        [DefaultValue ( true )]
        [Category ( "Appearance" )]
        [Description ( "Whether this gridview would need custom formatting per column ." )]
        public bool HasCustomFormatting
        {
          get
          {
    
            if (HttpContext.Current.Session["global." + this.ID + ".HasCustomFormatting"] == null)
              return false;
            else
              return (bool)HttpContext.Current.Session["global." + this.ID + ".HasCustomFormatting"];
          }
          set { HttpContext.Current.Session["global." + this.ID + ".HasCustomFormatting"] = value; }
        }
        #endregion
    
    
    
    
    
        #region Ld
        private ListDictionary ld;
        [Description ( "Contains the extended properties values from the stored procedures " )]
        public ListDictionary Ld
        {
          get
          {
            return ld;
          }
          set
          {
            this.ld = value;
          }
        }
        #endregion Ld
    
    
        #region MaxCharColapse
        /// <summary>
        /// Whether the results summary should be shown.
        /// </summary>
        [DefaultValue ( 50 )]
        [Category ( "Appearance" )]
        [Description ( "At which character the column of the gridview should colapse" )]
        public int MaxCharColapse
        {
          get
          {
            if (HttpContext.Current.Session["global." + this.ID + "MaxCharColapse"] == null)
              return 50;
            else
              return (int)HttpContext.Current.Session["global." + this.ID + "MaxCharColapse"];
          }
          set { HttpContext.Current.Session["global." + this.ID + "MaxCharColapse"] = value; }
        }
        #endregion MaxCharColapse
    
    
        private int GvPageSize
        {
          get
          {
            if (HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] == null)
            {
              //Utils.Debugger.WriteIf ( "GvPageSize is null " );
              return 20;
            }            //this is the default size of the page
            else
            {
              //Utils.Debugger.WriteIf ( "GvPageSize is  " + System.Convert.ToString ( HttpContext.Current.Session ["global." + this.ID + ".GvPageSize" ] ) );
              return System.Convert.ToInt32 ( HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] );
            }
          } //eof get
          set
          {
            try
            {                //accept only whole numbers , if not whole number set default 7
    
              int pageSizeToSet = value;
              HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] = pageSizeToSet;
              System.Convert.ToInt64 ( pageSizeToSet );
              if (pageSizeToSet >= this.DataSourceCount || pageSizeToSet < 0)
              {
                HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] = this.DataSourceCount;
                //Utils.Debugger.WriteIf ( "The DataSourceCount is " + System.Convert.ToString ( this.DataSourceCount ) );
                this.MyPageIndex = 0;
                //variant Unable to cast object of type 'System.Web.UI.WebControls.TableRow' to type 'System.Web.UI.WebControls.GridViewRow
                //this.AllowPaging = false; 
              } //eof to return all if 
              else
              {
                HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] = value;
              } //eof if the desired page size is smaller than the number 
    
            } //eof try 
            catch (System.FormatException sfe)
            {
              HttpContext.Current.Session["global." + this.ID + ".GvPageSize"] = 13; //fatal number of exceptions 
            } //eof catch
    
          } //eof set
    
        } //eof property GvPageSize
    
    
        private string GetSortDirection ()
        {
          switch (GridViewSortDirection)
          {
            case "ASC":
              GridViewSortDirection = "DESC";
              break;
    
            case "DESC":
              GridViewSortDirection = "ASC";
              break;
          }
    
          return GridViewSortDirection;
        }
    
        #region GridViewSortDirection
        private string GridViewSortDirection
        {
          get { return HttpContext.Current.Session["global." + this.ID + "SortDirection"] as string ?? "ASC"; }
          set { HttpContext.Current.Session["global." + this.ID + "SortDirection"] = value; }
        }
        #endregion GridViewSortDirection
    
    
        //private GenApp.Bo.User userObj;
        //public GenApp.Bo.User UserObj { get { return this.userObj; } set { this.userObj = value; } }
    
    
        #region GridViewSortExpression
        private string GridViewSortExpression
        {
          get { return HttpContext.Current.Session["global." + this.ID + "SortExpression"] as string ?? string.Empty; }
          set { HttpContext.Current.Session["global." + this.ID + "SortExpression"] = value; }
        }
        #endregion //GridViewSortExpression
    
    
        #region MyPageIndex
        public int MyPageIndex
        {
          get
          {
            //     //Utils.Debugger.WriteIf ( "The page index of gb with id " + Convert.ToString ( 
            //        HttpContext.Current.Session ["global." + this.ID ]) + " is " + 
            //Convert.ToString ( 
            //        HttpContext.Current.Session ["global." + this.ID + "MyPageIndex"] ))  ;
            return System.Convert.ToInt16 (
            HttpContext.Current.Session["global." + this.ID + "MyPageIndex"] );
    
          } //eof get
    
          set
          {
            this.PageIndex = value;
            HttpContext.Current.Session["global." + this.ID + "MyPageIndex"] = value;
          }
        } //eof property MyPageIndex
    
    
        #endregion //GridViewSortExpression
    
    
        #region StrLabMsgText
        private string _StrLabMsgText;
        public string StrLabMsgText
        {
          get
          {
            //     //Utils.Debugger.WriteIf ( "The page index of gb with id " + Convert.ToString ( 
            //        HttpContext.Current.Session ["global." + this.ID ]) + " is " + 
            //Convert.ToString ( 
            //        HttpContext.Current.Session ["global." + this.ID + "StrLabMsgText"] ))  ;
            return System.Convert.ToString (
            HttpContext.Current.Session["global." + this.ID + "StrLabMsgText"] );
    
          } //eof get
    
          set
          {
            _StrLabMsgText = value;
            HttpContext.Current.Session["global." + this.ID + "StrLabMsgText"] = value;
          }
        } //eof property StrLabMsgText
    
    
        #endregion
    
    
        #region DataSourceCount
        private int _dataSourceCount;
    
        /// <summary>
        /// The total number of rows in the data source.
        /// </summary>
        [Browsable ( false )]
        public int DataSourceCount
        {
          get
          {
            if (this.Rows.Count == 0)
              return 0;
            else if (this.AllowPaging)
              return this._dataSourceCount;
            else
              return this.Rows.Count;
          }
          set
          {
            this._dataSourceCount = value;
          } //eof set 
    
        }
        #endregion
    
    
        #region ColumnNumberToGenerateLinksTo
        private int _ColumnNumberToGenerateLinksTo;
    
        /// <summary>
        /// The total number of rows in the data source.
        /// </summary>
        [Browsable ( false )]
        public int ColumnNumberToGenerateLinksTo
        {
          get
          {
            if (_ColumnNumberToGenerateLinksTo == null)
              return 0;
            else
              return _ColumnNumberToGenerateLinksTo;
          }
          set
          {
            this._ColumnNumberToGenerateLinksTo = value;
          } //eof set 
    
        }
        #endregion
    
        #region UrlToLinkTo
        private string _UrlToLinkTo;
        /// <summary>
        /// Whether the results summary should be shown.
        /// </summary>
        [DefaultValue ( true )]
        [Category ( "Appearance" )]
        [Description ( " Which is the link to link to." )]
        public string UrlToLinkTo
        {
          get
          {
            if (HttpContext.Current.Session["global." + this.ID + ".UrlToLinkTo"] == null)
              return String.Empty;
            else
              return (string)HttpContext.Current.Session["global." + this.ID + ".UrlToLinkTo"];
          }
          set { HttpContext.Current.Session["global." + this.ID + ".UrlToLinkTo"] = value; }
        }
        #endregion
    
        //#region ColNameToLinkAgainst
        //private string _ColNameToLinkAgainst;
        ///// <summary>
        ///// Whether the results summary should be shown.
        ///// </summary>
        //[DefaultValue ( true )]
        //[Category ( "Appearance" )]
        //[Description ( " Which is the Column Name to link Against." )]
        //public string ColNameToLinkAgainst
        //{
        //  get
        //  {
        //    if (HttpContext.Current.Session["global." + this.ID + ".ColNameToLinkAgainst"] == null)
        //      return String.Empty;
        //    else
        //      return (string)HttpContext.Current.Session["global." + this.ID + ".ColNameToLinkAgainst"];
        //  }
        //  set { HttpContext.Current.Session["global." + this.ID + ".ColNameToLinkAgainst"] = value; }
        //}
        //#endregion
    
        #region ShowResultSummary
        /// <summary>
        /// Whether the results summary should be shown.
        /// </summary>
        [DefaultValue ( true )]
        [Category ( "Appearance" )]
        [Description ( "Whether the results summary should be shown." )]
        public bool ShowResultSummary
        {
          get
          {
    
            if (HttpContext.Current.Session["global." + this.ID + ".ShowResultSummary"] == null)
              return false;
            else
              return (bool)HttpContext.Current.Session["global." + this.ID + ".ShowResultSummary"];
          }
          set { HttpContext.Current.Session["global." + this.ID + ".ShowResultSummary"] = value; }
        }
        #endregion
    
    
        #region AllowInserting
        /// <summary>
        /// Whether the GridView will allow rows to be inserted.
        /// </summary>
        [DefaultValue ( false )]
        [Category ( "Behavior" )]
        [Description ( "Whether the GridView will allow rows to be inserted." )]
        public bool AllowInserting
        {
          get
          {
            if (HttpContext.Current.Session["AllowInserting"] == null)
              return false;
            else
              return (bool)HttpContext.Current.Session["AllowInserting"];
          }
          set
          {
            if (this.AllowInserting != value)
              this.RequiresDataBinding = true;
    
            HttpContext.Current.Session["AllowInserting"] = value;
          }
        }
        #endregion
    
    
        #region InsertRowActive
        /// <summary>
        /// Whether the insert row is active.
        /// </summary>
        [DefaultValue ( true )]
        [Category ( "Appearance" )]
        [Description ( "Whether the insert row is active." )]
        public bool InsertRowActive
        {
          get
          {
            if (HttpContext.Current.Session["InsertRowActive"] == null)
              return true;
            return (bool)HttpContext.Current.Session["InsertRowActive"];
          }
          set
          {
            if (this.InsertRowActive != value)
              this.RequiresDataBinding = true;
    
            HttpContext.Current.Session["InsertRowActive"] = value;
          }
        }
        #endregion
    
    
        #region InsertRow
        private GridViewRow _insertRow;
    
        /// <summary>
        /// The row in the grid that contains the insert controls.
        /// </summary>
        [Browsable ( false )]
        public GridViewRow InsertRow
        {
          get { return this._insertRow; }
        }
        #endregion
    
    
        #region HeaderRow
        private GridViewRow _myHeaderRow;
    
        /// <summary>
        /// Gets the row in the grid that corresponds to the header.
        /// </summary>
        [Browsable ( false )]
        public override GridViewRow HeaderRow
        {
          get
          {
            if (this._myHeaderRow != null)
              return this._myHeaderRow;
            else
              return base.HeaderRow;
          }
        }
        #endregion
    
    
        #region MyDataSource
        private DataTable _MyDataSource;
        public DataTable MyDataSource
        {
          get
          {
            return (DataTable)( HttpContext.Current.Session["global." + this.ID + "MyDataSource"] );
    
          } //eof get
    
          set
          {
            this._MyDataSource = value;
            HttpContext.Current.Session["global." + this.ID + "MyDataSource"] = value;
          }
        } //eof property MyDataSource
    
    
    
        #endregion MyDataSource
    
        #region AscendingImageUrl
        /// <summary>
        /// Image that is displayed when <see cref="SortDirection"/> is ascending.
        /// </summary>
        //[Editor ( typeof ( ImageUrlEditor ), typeof ( UITypeEditor ) )]
        [Description ( "Image that is displayed when SortDirection is ascending." )]
        [Category ( "Appearance" )]
        public string AscendingImageUrl
        {
          get { return HttpContext.Current.Session["AscendingImageUrl"] as string; }
          set { HttpContext.Current.Session["AscendingImageUrl"] = value; }
        }
        #endregion
    
    
        #region DescendingImageUrl
        /// <summary>
        /// Image that is displayed when <see cref="SortDirection"/
        /// is descending.
        /// </summary>
        //[Editor ( typeof ( ImageUrlEditor ), typeof ( UITypeEditor ) )]
        [Description ( "Image that is displayed when SortDirection is descending." )]
        [Category ( "Appearance" )]
        public string DescendingImageUrl
        {
          get { return HttpContext.Current.Session["DescendingImageUrl"] as string; }
          set { HttpContext.Current.Session["DescendingImageUrl"] = value; }
        }
        #endregion
    
    
        #region TextProperty
        [Bindable ( true )]
        [Category ( "Appearance" )]
        [DefaultValue ( "" )]
        [Localizable ( true )]
        public string Text
        {
          get
          {
            String s = (String)HttpContext.Current.Session["Text"];
            return ( ( s == null ) ? "[" + "global." + this.ID + "]" : s );
          }
    
          set
          {
            HttpContext.Current.Session["Text"] = value;
          }
        }
        #endregion Text
    
    
    
        #region FirstRowColor
        [Bindable ( true )]
        [Category ( "Appearance" )]
        [DefaultValue ( "" )]
        [Localizable ( true )]
        public string FirstRowColor
        {
          get
          {
            return (String)HttpContext.Current.Session["FirstRowColor"];
          }
    
          set
          {
            HttpContext.Current.Session["FirsRowColor"] = value;
          }
        }
        #endregion FirsRowColor
    
    
    
        #endregion
    
    
        #region Instance members
    
        #region Events
        /// <summary>
        /// Fires before a row is inserted.
        /// </summary>
        [Category ( "Action" )]
        [Description ( "Fires before a row is inserted." )]
        public event EventHandler<GridViewInsertEventArgs> RowInserting;
    
        /// <summary>
        /// Fires after a row has been inserted.
        /// </summary>
        [Category ( "Action" )]
        [Description ( "Fires after a row has been inserted." )]
        public event EventHandler<GridViewInsertedEventArgs> RowInserted;
    
    
        /// <summary>
        /// Raises the <see cref="RowInserting"/> event.
        /// </summary>
        /// <param name="e">Event data.</param>
        protected virtual void OnRowInserting ( GridViewInsertEventArgs e )
        {
          if (this.RowInserting != null)
            this.RowInserting ( this, e );
          else if (!this.IsBoundUsingDataSourceID && !e.Cancel)
            throw new System.Web.HttpException ( string.Format ( "The GridView '{0}' fired event RowInserting which wasn't handled.", "global." + this.ID ) );
        }
    
        /// <summary>
        /// Raises the <see cref="RowInserted"/> event.
        /// </summary>
        /// <param name="e">Event data.</param>
        protected virtual void OnRowInserted ( GridViewInsertedEventArgs e )
        {
          if (this.RowInserted != null)
            this.RowInserted ( this, e );
        }
    
        protected override void OnSorting ( GridViewSortEventArgs e )
        {
          //Utils.Debugger.WriteIf ( "OnSorting START" );
          GridViewSortExpression = e.SortExpression;
          //int pageIndex = this.PageIndex;
          int pageIndex = this.MyPageIndex;
    
          //    this.DataBind ( ); //databind again after sorting
          //Utils.Debugger.WriteIf ( "From OnSorting" );
          //this.PageSize = this.GvPageSize;
          //this.PageSize = 15; 
          //variant this.PageIndex = pageIndex;
          this.MyPageIndex = pageIndex;
    
    
          //variant this.CreateBottomSummary ( );
          this.DataSource = SortDataTable ( this.DataSource as DataTable, false );
    
          this.DataBind ();
    
          //base.OnSorting ( e );
        }
    
    
    
        protected override void OnDataBinding ( EventArgs e )
        {
          //DEBUG//Utils.Debugger.WriteIf ( "OnDataBionding start " );
          //int newSetPageSize = this.GetPagerSize ( );
          //Utils.Debugger.WriteIf ( "From OnDataBinding" );
          //this.GvPageSize = newSetPageSize;
    
          base.OnDataBinding ( e );
    
        } //eof method OnDataBinding
    
    
        #endregion    //W
        /// <summary>
        /// Create the pager.
        /// </summary>
        /// <param name="row">The pager row.</param>
        /// <param name="columnSpan">The number of columns the pager should span.</param>
        /// <param name="pagedDataSource">The data source.</param>
        protected override void InitializePager ( GridViewRow row, int columnSpan,
          PagedDataSource pagedDataSource )
        {
          //DEBUG//Utils.Debugger.WriteIf ( "Initialize Pager START" );
          // Nab total row count from data source
    
    
    
          #region GenericNumberPager
    
          #region Preparation
          this.DataSourceCount = pagedDataSource.DataSourceCount; ;
          HtmlGenericControl pageControls = new HtmlGenericControl ( "div" );
          pageControls.Style.Add ( "max-width", "100%" );
          pageControls.Style.Add ( HtmlTextWriterStyle.FontSize, "medium" );
    
          // Create table cell for pager
          TableCell cell = new TableCell ();
          cell.ColumnSpan = columnSpan;
          cell.Controls.Clear ();
    
    
          //variant AddSomeFontStyle pageControls.Style.Add ( HtmlTextWriterStyle.FontFamily, "webdings" );
          pageControls.Style.Add ( HtmlTextWriterStyle.FontSize, "medium" );
          pageControls.Style.Add ( "float", "left" );
          #endregion Preparation
    
    
          #region AddTheFirstLink
          LinkButton lnkFirst = new LinkButton ();
          lnkFirst.ID = "lnkFirst";
          lnkFirst.ToolTip = "Click here to open the First page";
          lnkFirst.CausesValidation = false;
          lnkFirst.Text = "First Page";
          lnkFirst.CommandName = "Page";
          lnkFirst.CommandArgument = "first";
          //variant lnkFirst.Enabled = (this.PageIndex != 0);
          lnkFirst.Enabled = ( this.PageIndex != 0 );
          pageControls.Controls.Add ( lnkFirst );
          pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          #endregion AddTheFirstLink
    
    
          #region AddThePreviousPageLink
          LinkButton lnkPrevious = new LinkButton ();
          lnkPrevious.ID = "lnkPrevious";
          lnkPrevious.ToolTip = "Click to open the Previous page";
          lnkPrevious.CausesValidation = false;
          lnkPrevious.Text = "Previous Page";
          lnkPrevious.CommandName = "Page";
          lnkPrevious.CommandArgument = "Prev";
          lnkPrevious.Enabled = lnkFirst.Enabled;
          pageControls.Controls.Add ( lnkPrevious );
          pageControls.Controls.Add ( new LiteralControl ( "&nbsp;" ) );
    
          #endregion AddTheNextPageLink
    
    
          #region AddTheNumbersForPaging
    
          int intNumOfPages = System.Convert.ToInt16 ( this.DataSourceCount / this.PageSize );
          int intCurrentPageIndex = this.MyPageIndex;
          int intSizeAdjuster = 0;
          int intPreviousTenPages = 0;
          int intNextTenPages = 0;
          bool flagDoCreatePagerLink = false;
    
    
    
          #region AddThePreviousTenPageLink
          intPreviousTenPages = intCurrentPageIndex - 10;
          if (intPreviousTenPages <= 0)
            intPreviousTenPages = 0;
    
          if (intPreviousTenPages != 0)
          {
            LinkButton lnkPreviousTen = new LinkButton ();
            lnkPreviousTen.ID = "lnkPreviousTen";
            lnkPreviousTen.ToolTip = "Click to open the Previous 10 pages";
            lnkPreviousTen.CausesValidation = false;
            lnkPreviousTen.Text = "-10...";
            lnkPreviousTen.CommandName = "Page";
            lnkPreviousTen.CommandArgument = intPreviousTenPages.ToString ();
            lnkPreviousTen.Enabled = lnkFirst.Enabled;
            pageControls.Controls.Add ( lnkPreviousTen );
            pageControls.Controls.Add ( new LiteralControl ( "&nbsp;" ) );
          }
          #endregion AddThePreviousTenPageLink
    
    
          #region IfThereIsOnlyOneItemItBehavesDifferently
          if (this.PageSize == 1)
            intSizeAdjuster = 0;
          else
            intSizeAdjuster = 1;
          #endregion IfThereIsOnlyOneItemItBehavesDifferently
    
          #region LoopTroughPageNumbers
          for (int i = 0; i < intNumOfPages + intSizeAdjuster; i++)
          {
            #region IfThePagerHasMoreThan2*10Pages
            if (intNumOfPages >= 2 * 10)
            {
              if (intCurrentPageIndex <= 10)
              {
                if (i <= intCurrentPageIndex + 10)
                  flagDoCreatePagerLink = true;
                else
                  flagDoCreatePagerLink = false;
    
                //else do nothing 
    
              } //eof if ( intCurrentPageIndex <= 10)
              else if (intCurrentPageIndex <= intNumOfPages - 10)
              {
                if (i >= intCurrentPageIndex - 10 && i <= intCurrentPageIndex + 10)
                  flagDoCreatePagerLink = true;
                else
                  flagDoCreatePagerLink = false;
    
              }
              else if (intCurrentPageIndex > intNumOfPages - 10)
              {
                if (i <= intCurrentPageIndex && i >= intCurrentPageIndex - 10)
                  flagDoCreatePagerLink = true;
                else if (i > intCurrentPageIndex)
                  flagDoCreatePagerLink = true;
                else
                  flagDoCreatePagerLink = false;
              }
    
              #region AddThePageNumberPagerLink
              if (flagDoCreatePagerLink == true)
              {
    
                LinkButton lbPager = new LinkButton ();
                lbPager.ID = i.ToString ();
    
                lbPager.CommandName = "Page";
                lbPager.CausesValidation = false;
                lbPager.CommandArgument = ( i + 1 ).ToString ();
                lbPager.Text = ( i + 1 ).ToString ();
                //disable the links for the current page
                if (intCurrentPageIndex == i)
                {
                  lbPager.ToolTip = "This is the current active page";
                  lbPager.Enabled = false;
                }
    
                pageControls.Controls.Add ( lbPager );
                pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
    
              }
              #endregion AddThePageNumberPagerLink
            } //eof if (intNumOfPages > 20)
            #endregion IfThePagerHasMoreThan2*10Pages
    
            else
            {
              #region AddThePageNumberPagerLink
              LinkButton lbPager = new LinkButton ();
              lbPager.ID = i.ToString ();
    
              lbPager.CommandName = "Page";
              lbPager.CausesValidation = false;
              lbPager.CommandArgument = ( i + 1 ).ToString ();
              lbPager.Text = ( i + 1 ).ToString ();
              //disable the links for the current page
              if (intCurrentPageIndex == i)
              {
                lbPager.ToolTip = "This is the current active page";
                lbPager.Enabled = false;
              }
    
              pageControls.Controls.Add ( lbPager );
              pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
              #endregion AddThePageNumberPagerLink
            } //else if ( intNumOfPages > 10 ) 
    
          } //eof for 
          #endregion LoopTroughPageNumbers
    
          #endregion AddTheNumbersForPaging
    
    
          #region AddTheNextPageLink
          LinkButton lnkNext = new LinkButton ();
          lnkNext.ID = "lnkNext";
          lnkNext.ToolTip = "Next page";
          lnkNext.CausesValidation = false;
          lnkNext.Text = "Next Page";
          lnkNext.CommandName = "Page";
          lnkNext.CommandArgument = "Next";
          //variant lnkNext.Enabled = (this.PageIndex < (this.PageCount - 1));
          lnkNext.Enabled = ( this.PageIndex < ( this.PageCount - 1 ) );
          pageControls.Controls.Add ( lnkNext );
          pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          #endregion AddTheNextPageLink
    
          #region AddTheNextTenPagesLink
    
          intNextTenPages = intCurrentPageIndex + 10;
          if (intNextTenPages >= intNumOfPages)
            intNextTenPages = intNumOfPages;
    
          if (intNextTenPages != intNumOfPages)
          {
            LinkButton lnkNextTen = new LinkButton ();
            lnkNextTen.ID = "lnkNextTen";
            lnkNextTen.ToolTip = "Next page";
            lnkNextTen.CausesValidation = false;
            lnkNextTen.Text = "..+10";
            lnkNextTen.CommandName = "Page";
            lnkNextTen.CommandArgument = intNextTenPages.ToString (); ;
            //variant lnkNextTen.Enabled = (this.PageIndex < (this.PageCount - 1));
            lnkNextTen.Enabled = ( this.PageIndex < ( this.PageCount - 1 ) );
            pageControls.Controls.Add ( lnkNextTen );
            pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          }
          #endregion AddTheNextPageLink
    
          #region AddTheLastLink
          LinkButton lnkLast = new LinkButton ();
          lnkLast.ID = "lnkLast";
          lnkLast.ToolTip = "Click here to open the Last page";
          lnkLast.CausesValidation = false;
          lnkLast.Text = "Last Page";
          lnkLast.CommandName = "Page";
          lnkLast.CommandArgument = "Last";
          lnkLast.Enabled = ( this.PageIndex < ( this.PageCount - 1 ) );
          pageControls.Controls.Add ( lnkLast );
          pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          #endregion AddTheLastLink
    
    
          cell.Controls.Add ( pageControls );
          // Add the cell to pager row
          row.Cells.Add ( cell );
    
    
    
          #region CopyPaste
          //pageControls.Controls.Add ( lnkFirst );
          //pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          //LinkButton lnkPrevious = new LinkButton ();
          //lnkPrevious.ID = "lnkPrevious";
          //lnkPrevious.ToolTip = "Previous page";
          //lnkPrevious.CausesValidation = false;
          //lnkPrevious.Text = "<<";
          //lnkPrevious.CommandName = "Page";
          //lnkPrevious.CommandArgument = "Prev";
          //lnkPrevious.Enabled = lnkFirst.Enabled;
          //pageControls.Controls.Add ( lnkPrevious );
          //pageControls.Controls.Add ( new LiteralControl ( "&nbsp;" ) );
          //LinkButton lnkNext = new LinkButton ();
          //lnkNext.ID = "lnkNext";
          //lnkNext.ToolTip = "Next page";
          //lnkNext.CausesValidation = false;
          //lnkNext.Text = ">>";
          //lnkNext.CommandName = "Page";
          //lnkNext.CommandArgument = "Next";
          ////variant lnkNext.Enabled = (this.PageIndex < (this.PageCount - 1));
          //lnkNext.Enabled = ( this.PageIndex < ( this.PageCount - 1 ) );
          //pageControls.Controls.Add ( lnkNext );
          //pageControls.Controls.Add ( new LiteralControl ( "&nbsp;&nbsp; " ) );
          //LinkButton lnkLast = new LinkButton ();
          //lnkLast.ID = "lnkLast";
          //lnkLast.ToolTip = "Last page";
          //lnkLast.CausesValidation = false;
          //lnkLast.Text = "last";
          //lnkLast.CommandName = "Page";
          //lnkLast.CommandArgument = "Last";
          //lnkLast.Enabled = lnkNext.Enabled;
          //pageControls.Controls.Add ( lnkLast );
          #endregion CopyPaste
          // Add pager controls to cell1
    
    
    
          #endregion GenericNumberPager
    
          //variant this.CreateBottomSummary ( );
        }
    
    
        protected override void OnInit ( EventArgs e )
        {
          base.OnInit ( e );
          //Utils.Debugger.WriteIf ( "XGrid.cs OnInit START" );
          //this.GvPageSize = 20;
          this.PageIndex = this.MyPageIndex;
        } //eof method 
    
        protected override void LoadControlState ( object savedState )
        {
          base.LoadControlState ( savedState );
        }
    
        private void CreateBottomSummary ()
        {
          //Utils.Debugger.WriteIf ( "XGrid.cs CreateBottomSummary START" );
          if (this.ShowResultSummary && this.PageCount != 0)
          {
            //Utils.Debugger.WriteIf ( " after if " );
            // Create summary controls
            //variant org 
            //variant int firstResultIndex = this.PageIndex * this.PageSize;
            int firstResultIndex = this.PageIndex * this.PageSize;
    
            //DEBUG//Utils.Debugger.WriteIf ( "From CreateBottomSummary" );
            //variant gets null each 2 time int firstResultIndex = this.PageIndex * this.GvPageSize; 
            HtmlGenericControl topSummaryControl = new HtmlGenericControl ( "div" );
            topSummaryControl.Style.Add ( "float", "left" );
            topSummaryControl.InnerHtml = string.Format ( "Showing records <strong> from </strong>" +
            "{0} <strong> to </strong> {1} out of {2}   ", firstResultIndex + 1,
            firstResultIndex + this.Rows.Count, this.DataSourceCount ); //add + " with " 
            HtmlGenericControl bottomSummaryControl = new HtmlGenericControl ( "div" );
            bottomSummaryControl.Style.Add ( "float", "left" );
            bottomSummaryControl.InnerHtml = topSummaryControl.InnerHtml;
    
    
            #region AddHererTextBox
            ////ADD HERE TEXTBOX START 
            ////====================================Add here the paging textbox START
            //TextBox txtgv = new TextBox ( );
            //txtgv.ID= "global." + this.ID.ToString ( ) + "txtgv";
            //txtgv.Visible = true;
            //txtgv.Width = new Unit ( 20, UnitType.Pixel );
            //txtgv.Font.Size = new FontUnit ( FontSize.XSmall );
            //Utils.Debugger.WriteIf ( "From CreateBottomSummary2" );
            //txtgv.Text = System.Convert.ToString ( this.GvPageSize );
            //txtgv.EnableViewState = true;
            ////ASSIGN EVENT HANDLERS DURING CREATE CHILD CONTROLS 
            ////txtgv.TextChanged += new EventHandler ( this.ClickSetPageSize );
            //Button butPageSetter = new Button ( );
            //butPageSetter.ID = "butPageSetter";
            //butPageSetter.Text = " per page ";
            //butPageSetter.Click += new EventHandler ( this.ClickSetPageSize );
            ////txtgv.TextChanged += new EventHandler ( txtgv_TextChanged );
            //bottomSummaryControl.Controls.Add ( txtgv );
            //bottomSummaryControl.Controls.Add ( butPageSetter );
            ////====================================Add here the paging textbox END
            #endregion //AddHererTextBox
    
    
            if (this.PageCount == 1)
            {
              // Add summary to table at the top
              this.Controls[0].Controls.AddAt ( 0, this.CreateSummaryRow ( topSummaryControl ) );
              // Add summary to table at the bottom
              this.Controls[0].Controls.Add ( this.CreateSummaryRow ( bottomSummaryControl ) );
              //variant bottom this.Controls.Add ( this.CreateSummaryRow ( bottomSummaryControl ) );
            } //eof if
            else
            {
              // Add summary control to top pager
              if (this.TopPagerRow != null)
                this.TopPagerRow.Cells[0].Controls.Add ( topSummaryControl );
              // Add summary control to bottom pager
              if (this.BottomPagerRow != null)
                this.BottomPagerRow.Cells[0].Controls.Add ( bottomSummaryControl );
            } //eof else 
          } //eof if ( this.ShowResultSummary && this.PageCount != 0 )
    
          //variant base.PageSize = this.GvPageSize; 
        }
    
        /// <summary>
        /// Creates the control's child controls.
        /// </summary>
        protected override int CreateChildControls ( IEnumerable dataSource, bool dataBinding )
        {
          int controlsCreated = base.CreateChildControls ( dataSource, dataBinding );
          if (this.DisplayInsertRow)
          {
            ICollection cols = this.CreateColumns ( null, false );
            DataControlField[] fields = new DataControlField[cols.Count];
            cols.CopyTo ( fields, 0 );
            if (this.Controls.Count == 0)
            {
              // Create dummy table for inserting the first entry
              Table tableControl = new Table ();
              if (this.ShowHeader)
              {
                // Create header
                this._myHeaderRow = this.CreateRow ( -1, -1, DataControlRowType.Header, DataControlRowState.Normal );
                this.InitializeRow ( this._myHeaderRow, fields );
                // Trigger events
                GridViewRowEventArgs headerRowArgs = new GridViewRowEventArgs ( this._myHeaderRow );
                this.OnRowCreated ( headerRowArgs );
                tableControl.Rows.Add ( this._myHeaderRow );
                if (dataBinding)
                  this.OnRowDataBound ( headerRowArgs );
              }
              // Add insert row
              this.Controls.Add ( tableControl );
    
    
            }
            else
              // Use generated header row
              this._myHeaderRow = null;
    
            // Create insertion row
            this._insertRow = this.CreateRow ( -1, -1, DataControlRowType.DataRow, this.InsertRowActive ? DataControlRowState.Insert : DataControlRowState.Normal );
            this._insertRow.ControlStyle.MergeWith ( this.AlternatingRowStyle );
            this.InitializeRow ( this._insertRow, fields );
    
            // Trigger events
            GridViewRowEventArgs insertRowArgs = new GridViewRowEventArgs ( this._insertRow );
            this.OnRowCreated ( insertRowArgs );
    
            // Add row to top of table, just below header
            this.Controls[0].Controls.AddAt ( this.Controls[0].Controls.IndexOf ( this.HeaderRow ) + 1, this._insertRow );
            if (dataBinding)
              this.OnRowDataBound ( insertRowArgs );
          }
    
          this.CreateBottomSummary ();
          return controlsCreated;
        } //eof CreateChildControls
    
        /// <summary>
        /// Initialises a row in the grid.
        /// </summary>
        /// <param name="row">The row to initialise.</param>
        /// <param name="fields">The fields with which to initialise the row.</param>
        protected override void InitializeRow ( GridViewRow row, DataControlField[] fields )
        {
          base.InitializeRow ( row, fields );
    
          if (row.RowType == DataControlRowType.Header && this.AscendingImageUrl != null)
          {
    
    
    
    
            for (int i = 0; i < fields.Length; i++)
            {
              if (this.SortExpression.Length > 0 && fields[i].SortExpression == this.SortExpression)
              {
                // Add sort indicator
                Image sortIndicator = new Image ();
                sortIndicator.ImageUrl = this.SortDirection == SortDirection.Ascending ? this.AscendingImageUrl : this.DescendingImageUrl;
                sortIndicator.Style.Add ( HtmlTextWriterStyle.VerticalAlign, "TextTop" );
                row.Cells[i].Controls.Add ( sortIndicator );
                break;
              }
            }
          }
    
          foreach (TableCell cell in row.Cells)
          {
            // If we have an insert button it should only be shown on the insert row
            foreach (Control control in cell.Controls)
            {
              IButtonControl button = control as IButtonControl;
              if (row == this._insertRow)
              {
                if (row.RowState == DataControlRowState.Normal)
                {
                  // Hide all controls other than the insert button on the insert row
                  control.Visible = false;
                  if (button != null && ( button.CommandName == "Insert" || button.CommandName == "New" ))
                    control.Visible = true;
                }
                else if (button != null && button.CommandName == "Cancel")
                  // Hide cancel button on insert row
                  control.Visible = false;
              }
              else if (button != null && button.CommandName == "New")
                // Hide the insert button from all other rows
                control.Visible = false;
            }
          }
        }
    
        private IOrderedDictionary _insertValues;
    
        private bool HandleInsertCallback ( int affectedRows, Exception ex )
        {
          GridViewInsertedEventArgs e = new GridViewInsertedEventArgs ( this._insertValues, ex );
          this.OnRowInserted ( e );
          if (ex != null && !e.ExceptionHandled)
            return false;
    
          this.RequiresDataBinding = true;
          return true;
        }
    
        /// <summary>
        /// Raises the <see cref="GridView.RowCommand"/> event.
        /// </summary>
        /// <param name="e">Event data.</param>
        protected override void OnRowCommand ( GridViewCommandEventArgs e )
        {
          base.OnRowCommand ( e );
          if (e.CommandName == "New")
          {
            this.InsertRowActive = true;
            this.EditIndex = -1;
            this.RequiresDataBinding = true;
          }
          else if (e.CommandName == "Edit")
            this.InsertRowActive = false;
          else if (e.CommandName == "Insert")
          {
            // Perform validation if necessary
            bool doInsert = true;
            IButtonControl button = e.CommandSource as IButtonControl;
            if (button != null)
            {
              if (button.CausesValidation)
              {
                this.Page.Validate ( button.ValidationGroup );
                doInsert = this.Page.IsValid;
              }
            }
    
            if (doInsert)
            {
              // Get values
              this._insertValues = new OrderedDictionary ();
              this.ExtractRowValues ( this._insertValues, this._insertRow, true, false );
              GridViewInsertEventArgs insertArgs = new GridViewInsertEventArgs ( this._insertRow, this._insertValues );
              this.OnRowInserting ( insertArgs );
              if (!insertArgs.Cancel && this.IsBoundUsingDataSourceID)
              {
                // Get data source
                DataSourceView data = this.GetData ();
                data.Insert ( this._insertValues, this.HandleInsertCallback );
              }
            }
          }
        }  //eof method OnRowCommand
    
        protected override void OnRowUpdating ( GridViewUpdateEventArgs e )
        {
          base.OnRowUpdating ( e );
        }
    
        protected override void OnPageIndexChanging ( GridViewPageEventArgs e )
        {
          this.DataSource = this.SortDataTable ( this.DataSource as DataTable, true );
          //this.PageIndex = e.NewPageIndex;
          this.MyPageIndex = e.NewPageIndex;
    
          //Utils.Debugger.WriteIf ( "From OnPageIndexChanging" );
    
          this.DataBind (); //databind again after sorting            
        } //eof method 
    
    
    
        protected override void DataBind ( bool raiseOnDataBinding )
        {
          //this.PageSize = this.GetPagerSize ( );
          //this.PageSize = this.GvPageSize; 
    
          base.DataBind ( raiseOnDataBinding );
          this.PageIndex = this.MyPageIndex;
        }
        /// <summary>
        /// Renders the contents of the control.
        /// </summary>
        /// <param name="writer">The <see cref="HtmlTextWriter"/> to write to.</param>
        protected override void RenderContents ( HtmlTextWriter writer )
        {
          if (String.IsNullOrEmpty ( this.StrLabMsgText ) == false)
          {
            writer.WriteBeginTag ( "div" );
            writer.WriteBeginTag ( "p" );
            writer.Write ( this.StrLabMsgText );
            writer.WriteEndTag ( "p" );
    
            writer.WriteEndTag ( "div" );
          }
          base.RenderContents ( writer );
        } //eof method RenderContents
    
    
    
        //OLD private TableRow CreateSummaryRow ( Control summaryControl )
        //{
        //  TableRow summaryRow = new TableRow ( );
        //  TableCell summaryCell = new TableCell ( );
        //  summaryCell.ColumnSpan = this.HeaderRow.Cells.Count;
        //  summaryRow.Cells.Add ( summaryCell );
        //  summaryCell.Controls.Add ( summaryControl );
    
        //  return summaryRow;
        //} //eof method CreateSummaryRow
    
        private GridViewRow CreateSummaryRow ( Control summaryControl )
        {
          GridViewRow summaryRow = new GridViewRow ( 0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal );
          TableCell summaryCell = new TableCell ();
          summaryCell.ColumnSpan = this.HeaderRow.Cells.Count;
          summaryRow.Cells.Add ( summaryCell );
          summaryCell.Controls.Add ( summaryControl );
    
          return summaryRow;
        } //eof method CreateSummaryRow
    
    
        protected override void OnRowCreated ( GridViewRowEventArgs e )
        {
          //Utils.Debugger.WriteIf ( "START --- XGrid -- OnRowCreated" );
          base.OnRowCreated ( e );
    
          #region HideColumnsSetToBeHidden
          System.Collections.Specialized.ListDictionary ld = this.Ld;
          if (ld != null)
          {
            for (int i = 0; i < e.Row.Cells.Count; i++)
            {
              string key;
              int intColNumberToHide;
    
    
              if (i < 9)
                key = "0" + i.ToString () + "HideColumn";
              else
                key = i.ToString () + "HideColumn";
    
              if (key != null && ld != null && ld[key] != null && String.IsNullOrEmpty ( ld[key].ToString () ) == false)
              {
                #region TryToGetANumber
                try
                {
                  intColNumberToHide = System.Convert.ToInt16 ( ld[key] );
                  if (intColNumberToHide == 1)
                  {
                    e.Row.Cells[i].Visible = false;
                  }
                  else
                  {
                    //do nothing by default all this.columns are visible !!!                                
                  }
                }
                #endregion TryToGetANumber
                #region CatchExceptions
                catch (Exception ex)
                {
    
                }
                #endregion CatchExceptions
              } //eof if (String.IsNullOrEmpty ( ld[key].ToString() ) == false)
            }
          } //eof if (ld != null)
          #endregion HideColumnsSetToBeHidden
    
          if (e.Row.RowType == DataControlRowType.DataRow)
          {
            if (( e.Row.RowIndex % 2 ) == 0)
              e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml ( "#EFEFEF" );
          } //eof if 
          //Utils.Debugger.WriteIf ( "END --- XGrid -- OnRowCreated" );
        } //eof method 
    
    
    
        protected override void OnDataBound ( EventArgs e )
        {
          base.OnDataBound ( e );
    
        }
    
        protected override void OnRowDataBound ( GridViewRowEventArgs e )
        {
    
    
          //Utils.Debugger.WriteIf ( "START --- XGrid --- OnRowDataBound" );
          base.OnRowDataBound ( e );
    
                
    
          
          if (e.Row.RowType == DataControlRowType.Header)
          {
    
          }
    
        } //eof method 
    
    
        private bool DisplayInsertRow
        {
          get { return this.AllowInserting && this.PageIndex == 0; }
        }
        #endregion
    
    
        #region TemplateMethods
        protected override object SaveViewState ()
        {
          return new Pair ( base.SaveViewState (), null );
        }
    
        protected override void LoadViewState ( object savedState )
        {
          base.LoadViewState ( ( (Pair)savedState ).First );
          EnsureChildControls ();
        }
    
        protected override void CreateChildControls ()
        {
          base.CreateChildControls ();
        }
    
        #endregion //TemplateMethods
    
    
        #region UtilityMethods
    
        /// <summary>
        /// Search for a control within the passed root control by the control id passed as string
        /// </summary>
        /// <param name="root">the upper control to start to search for</param>
        /// <param name="id">the id of the control as string</param>
        /// <returns></returns>
        private Control FindControlRecursively ( Control root, string id )
        {
          try
          {
            if (root.ID == id)
            {
              return root;
            } //eof if
    
            foreach (Control c in root.Controls)
            {
              Control t = this.FindControlRecursively ( c, id );
              if (t != null)
              {
                return t;
              } //eof if
            } //eof foreach
          } //eof try 
          catch (Exception e)
          {
            //Utils.Debugger.WriteIf ( "The following Exception occured : \n" + e.Message );
            return null;
          } //eof catch
    
          return null;
        } //eof FindControlRecursive
    
    
        protected DataView SortDataTable ( DataTable dataTable, bool isPageIndexChanging )
        {
          //Utils.Debugger.WriteIf ("SortDataTable(DataTable dataTable, bool isPageIndexChanging) START");
          if (dataTable != null)
          {
            DataView dataView = new DataView ( dataTable );
            if (GridViewSortExpression != string.Empty)
            {
              try
              {
    
                if (isPageIndexChanging)
                {
                  dataView.Sort = string.Format ( "{0} {1}", GridViewSortExpression, GridViewSortDirection );
                }
                else
                {
                  dataView.Sort = string.Format ( "{0} {1}", GridViewSortExpression, GetSortDirection () );
                }
              }
              catch (Exception e)
              {
    
              }
            }
            return dataView;
          }
          else
          {
            return new DataView ();
          }
        } //eof method SortDataTable
    
        #endregion //UtilityMethods
    
    
      } //eof class 
    
    
      /// <summary>
      /// Provides data for the <see cref="ExtendedGridView.RowInserting"/> event.
      /// </summary>
      public class GridViewInsertEventArgs : CancelEventArgs
      {
        #region Constructor
        /// <summary>
        /// Initialises a <see cref="GridViewInsertEventArgs"/>.
        /// </summary>
        /// <param name="row">The insertion row.</param>
        /// <param name="newValues">The values for the new row.</param>
        public GridViewInsertEventArgs ( GridViewRow row, IOrderedDictionary newValues )
        {
          this._row = row;
          this._values = newValues;
        }
        #endregion
    
        #region Properties
    
        #region Row
        private GridViewRow _row;
    
        /// <summary>
        /// The row containing the input controls.
        /// </summary>
        public GridViewRow Row
        {
          get { return this._row; }
        }
        #endregion
    
        #region NewValues
        private IOrderedDictionary _values;
    
        /// <summary>
        /// The values for the new row to insert.
        /// </summary>
        public IOrderedDictionary NewValues
        {
          get { return this._values; }
        }
        #endregion
    
        #endregion
      }
    
      /// <summary>
      /// Provides data for the <see cref="ExtendedGridView.RowInserted"/> delegate.
      /// </summary>
      public class GridViewInsertedEventArgs : EventArgs
      {
        #region Constructor
        /// <summary>
        /// Initialises a <see cref="GridViewInsertedEventArgs"/>.
        /// </summary>
        /// <param name="newValues">The values for the new row.</param>
        /// <param name="ex">The exception that occurred during the insert, if any.</param>
        public GridViewInsertedEventArgs ( IOrderedDictionary newValues, Exception ex )
        {
          this._values = newValues;
          this._exception = ex;
        }
        #endregion
    
        #region Properties
    
        #region NewValues
        private IOrderedDictionary _values;
    
        /// <summary>
        /// The values that were inserted into the new row.
        /// </summary>
        public IOrderedDictionary NewValues
        {
          get { return this._values; }
        }
        #endregion
    
        #region Exception
        private Exception _exception;
    
        /// <summary>
        /// The exception that occurred during the insert, if any.
        /// </summary>
        public Exception Exception
        {
          get { return this._exception; }
        }
        #endregion
    
        #region ExceptionHandled
        private bool _exceptionHandled;
    
        /// <summary>
        /// Whether the exception that occurred during the insert has been handled.
        /// </summary>
        public bool ExceptionHandled
        {
          get { return this._exceptionHandled; }
          set { this._exceptionHandled = value; }
        }
        #endregion
    
        #endregion
      } //eof class GridViewInsertedEventArgs
    } //eof namespace Controls
    

    5.13.2009

    list of the new fusion related technollogies

    SOURCES:
    A Brief History of Fusion Power Research


    PIONEERS:

    Beam-target (Oliphant, 1934)
    Magneto-electrostatic toroid trap (ATOLL, Artsimovich)
    Convergent shock-waves (Huemul, Argentina)
    Toroidal z-pinch (ZETA)
    tokamak (T-1 to 10, Kurchatov Institute)

    MAGNETIC:

    High beta tokamak (HBT-EP)
    stellarator (Wendelstein W 7-X)
    Compact stellarator (NCSX Princeton [cancelled])
    reversed field pinch (RFX-Mod Italy)
    spheromak (SSPX Lawrence Livermore)
    spherical tokamak (MAST)
    tandem mirror (Gamma-10 Japan)
    Bumpy torus (ELMO, EBT, ORNL)
    Galatea (Tornado)
    Galatea [magnetic suspension] (Levitron)
    accelerated FRC (TCS-U)
    LDX
    odd-parity RMF

    INERTIAL:

    Laser Inertial (NIF)
    Heavy Ion fusion (HIFAR Lawrence Berkeley)

    Z-PINCH:

    Pulsed z-pinch (Saturn, Sandia)
    Staged Z-pinch (ZOT)
    Wire array Z-pinch (Z-machine, Sandia)
    High density Z-pinch (MAGPIE Imperial College)
    Inverse Z-pinch

    ELECTROSTATIC:

    Fusor (Fusor, Farnsworth)
    IEC (fusor, hirsh-meeks)
    Polywell (WB-1 to 7, Bussard)
    IEC (POPS)
    IEC, plasma electrode (PoF, Sanns)
    IEC, beam/spherical capacitor (STAR, Sesselmann)

    OTHER/COMBINATORIAL:

    Flow Pinch (ZAP, Uni Washington)
    CT Accel (CTIX, UC Davis)
    magneto-kinetic (PHDX, Plasma Dynamic Lab)
    magnetized target (AFRL, LANL)
    magneto-inertial (OMEGA laser, LLE, Rochester)
    levitated dipole [superconducting] (LDX, MIT, PSGC)
    Maryland Centrifugal (MCX)
    Sheared magnetofluid/Bernouilli confinement (MBX, Uni Texas)
    Penning fusion (PFX, LANL)
    plasma jets (HyperV, Chantilly)
    magnetized target fusion with mechanical compression (General Fusion, Burnaby)
    Field-reversed colliding beams (Tri-Alpha)
    multi-beam accelerator (MIGMA)
    Piezo/Lithium tantalate (UCLA, Putterman)
    sonofusion (ORNL, Taleyarkhan)
    LENR/electrolysis cell (need I say the names!!)
    Muon catalysed fusion (Berkeley, Alvarez)
    Focus fusion (DPF, Lawrenceville Plasma Physics, Lerner)
    Rotating lithium wall (RWE, Maryland)

    5.07.2009

    db trigger for tracking of db changes on sql server 2005 2008 (revised)

    This trigger demonstrates the enforcing of the someValue xml element in the sql command to be executed on a sql server 2005 / 2008
    Thus one could modigy it to add more enforcements: for example :
    I had to change the proc since ...

    it also keeps track on all the sql commands and saves them into a history log table, so one could digg out the older version and rerun them straight away .

    I would be glad to receive and improvement suggestions - how-to keep track on the versions , version rolling etc. Enjoy !


    USE [GA_DEV]
    GO
    
    /****** Object:  DdlTrigger [TraceDbChanges]    Script Date: 05/07/2009 12:57:34 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    
    
    
    create trigger [TraceDbChanges]
    on database
    for create_procedure, alter_procedure, drop_procedure,
    create_table, alter_table, drop_table,
    create_function, alter_function, drop_function , 
    create_trigger , alter_trigger , drop_trigger 
    as
    
    set nocount on
    
    declare @data xml
    set @data = EVENTDATA()
    declare @DbVersion varchar(20)
    set @DbVersion =(select ga.GetDbVersion())
    declare @DbType varchar(20)
    set @DbType =(select ga.GetDbType())
    declare @DbName varchar(256)
    set @DbName =@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)')
    declare @EventType varchar(256)
    set @EventType =@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)')
    declare @ObjectName varchar(256)
    set @ObjectName  = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)')
    declare @ObjectType varchar(25)
    set @ObjectType = @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)')
    declare @TSQLCommand varchar(max)
    set @TSQLCommand = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)')
    declare @opentag varchar(4)
    set @opentag= '&lt;'
    declare @closetag varchar(4) 
    set @closetag= '&gt;'
    declare @newDataTxt varchar(max) 
    set @newDataTxt= cast(@data as varchar(max))
    set @newDataTxt = REPLACE ( REPLACE(@newDataTxt , @opentag , '<') , @closetag , '>')
    -- print @newDataTxt
    declare @newDataXml xml 
    set @newDataXml = CONVERT ( xml , @newDataTxt)
    
    declare @Version varchar(50)
    set @Version = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/Version)[1]', 'varchar(50)')
    
    -- if we are dropping take the version from the existing object 
    if  ( SUBSTRING(@EventType , 0 , 5)) = 'DROP'
    set @Version =( select top 1 [Version]  from ga.DbObjChangeLog where ObjectName=@ObjectName order by [LogId] desc)
    if ( @Version is null)
    set @Version = '1.0.0'
    
    declare @Description varchar(max)
    set @Description = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/Description)[1]', 'varchar(max)')
    
    declare @ChangeDescription varchar(max)
    set @ChangeDescription = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/ChangeDescription)[1]', 'varchar(max)')
    
    declare @LoginName varchar(256) 
    set @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
    declare @FirstName varchar(50)
    set @FirstName= (select [FirstName] from [ga].[LoginsForUsers] where [LoginName] = @LoginName)
    declare @LastName varchar(50)
    set @LastName  = (select [LastName] from [ga].[LoginsForUsers] where [LoginName] = @LoginName)
    declare @SchemaName sysname 
    set @SchemaName = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');
    --declare @Description xml 
    --set @Description = @data.query('(/EVENT_INSTANCE/TSQLCommand/text())')
    
    
    
    
    --print 'VERSION IS ' + @Version
    --print @newDataTxt
    --print cast(@data as varchar(max))
    
    
    -- select column_name from information_schema.columns where table_name ='DbObjChangeLog'
    insert into [ga].[DbObjChangeLog]
    (
    [DatabaseName] ,
    [SchemaName],
    [DbVersion] ,
    [DbType],
    [EventType],
    [ObjectName],
    [ObjectType] ,
    [Version],
    [Description],
    [ChangeDescription],
    [SqlCommand] ,
    [LoginName] ,
    [FirstName],
    [LastName] 
    )
    
    values(
    
    @DbName,
    @SchemaName,
    @DbVersion,
    @DbType,
    @EventType, 
    @ObjectName, 
    @ObjectType , 
    @Version,
    @Description,
    @ChangeDescription,
    @newDataTxt, 
    @LoginName , 
    @FirstName , 
    @LastName
    )
    
    
    
    
    GO
    
    SET ANSI_NULLS OFF
    GO
    
    SET QUOTED_IDENTIFIER OFF
    GO
    
    DISABLE TRIGGER [TraceDbChanges] ON DATABASE
    GO
    
    ENABLE TRIGGER [TraceDbChanges] ON DATABASE
    GO
    
    
    

    5.06.2009

    svn cheat sheet ( revised )

    :: HINT COPY PASTE THE WHOLE TEST THE :: STANDS FOR COMMENTS IN CMD AND WILL NOT BE INCLUDED
    ::SOURCE:
    ::http://www.abbeyworkshop.com/howto/misc/svn01/

    :: Setting up a Subversion Server under Windows

    ::ADD THE subversion bin directory to your PATH environmental variable
    ::


    ::ADD THE FOLLOWING ENVIRONMENTAL VARIABLE ENV
    SVN_EDITOR
    ::AND THE VALUE the path to your favorite text editor with " " around the path !!!
    "C:\Program Files\TextPad 5\textpad.exe"
    pause

    ::GET HELP FOR SVN
    svn help
    pause

    ::GET HELP FOR SVN COMMAND
    svn help revert
    pause

    ::CREATE NEW REPOSITORY
    svnadmin create d:/svn
    pause

    ::EDIT THE USER NAME AND THE PASS IN THE REPOSITORY
    START /MAX TEXTPAD "D:\svn\conf\svnserve.conf"
    pause

    ::uncoment the following lines
    [general]
    anon-access = read
    auth-access = write
    password-db = passwd

    ::NOW MAKE THE DIRECTORY STRUCTURE
    mkdir D:\svn\poc
    mkdir D:\svn\poc\branches
    mkdir D:\svn\poc\tags
    mkdir D:\svn\poc\trunk

    ::uncomment the following lines ( replace for you users and passwords )
    start /max textpad D:\svn\conf\passwd :
    [users]
    user1 = pass1
    user2 = pass2

    :: Start the subversion server by issuing this command in the command window:
    :: THE CMD /C will start new version of the cmd.exe
    start /max CMD /C "svnserve --daemon --root d:\SVN"


    ::JUST CHANGE TO THE D:\ DRIVE
    d:

    ::NOW CHANGE TO THE DIRECTORY OF your project
    :: ASSUMING THAT THE PROJECT IS BELLLOW THE D:\poc folder
    cd D:\

    ::import for first time the project name
    svn import poc file:///d:/svn/poc -m "Log Message"


    ::TO START USING THE VERSION CONTROL FEATURES CHECK OUT A PROJECT INTO YOUR LOCAL WORKING DIRECTORY, CREATE THE DIRECTORY TO WHICH
    mkdir D:\temp\poc


    ::NOW GO TO THE WORKING DIRECTORY
    mkdir D:\temp\poc
    cd D:\temp\poc
    ::now checkout the poc project
    svn checkout file:///d:/svn/poc/trunk poc

    ::TO GET A LIST OF THE CURRENT PROJECTS STORED IN A REPOSITORY, YOU CAN USE THE FOLLOWING COMMAND
    svn list --verbose file:///svn/poc

    svn status

    ::SUBVERSION DOES NOT TRACK THE VERSION NUMBERS FOR INDIVIDUAL PROJECTS AUTOMATICALLY. INSTEAD, IT TRACKS EACH UPDATE TO THE REPOSITORY AND TRACKS THE VERSIONS OF THESE UPDATES. TO CREATE INTERIM PROJECT RELEASES, YOU MUST CREATE "TAGS" WHICH IDENTIFY A SPECIFY VERSION OF A PROJECT. THIS IS DONE BY MAKING A VIRTUAL COPY OF A PROJECT IN THE TAGS DIRECTORY. FOR EXAMPLE
    svn copy http://ysg/svn/poc/trunk http://ysg/svn/poc/tags/0.1.0 -m "Tagging the 0.1.0 release of the poc"

    ::THIS CREATES A SORT OF BOOKMARK OR SNAPSHOT WHICH RECORDS THE CURRENT STATE OF THE PROJECT. THEN, YOU CAN CHECKOUT THE PROJECT IN THIS STATE AT ANY TIME BY SIMPLY REFERRING TO THAT RELEASE NUMBER.

    ::TO GET A LIST OF THE RELEASES FOR A PROJECT.
    svn list http://localhost/svn/repos/poc/tags 0.1.0/
    ipconfig
    svn list http://192.168.0.153/svn/repos/poc/tags 0.1.0/

    The typical work cycle looks like this:

    Update your working copy
    svn update
    Make changes
    svn add
    svn delete
    svn copy
    svn move
    Examine your changes
    svn status
    svn diff
    svn revert
    Merge others' changes into your working copy
    svn update
    svn resolved
    Commit your changes
    svn commit

    Update Your Working Copy

    When working on a project with a team, you'll want to update your working copy to receive any changes made since your last update by other developers on the project. Use svn update to bring your working copy into sync with the latest revision in the repository.
    $ svn update
    U foo.c
    U bar.c
    Updated to revision 2.

    L abc.c # svn has a lock in its .svn directory for abc.c
    M bar.c # the content in bar.c has local modifications
    M baz.c # baz.c has property but no content modifications
    X 3rd_party # this dir is part of an externals definition
    ? foo.o # svn doesn't manage foo.o
    ! some_dir # svn manages this, but it's either missing or incomplete
    ~ qux # versioned as file/dir/link, but type has changed
    I .screenrc # svn doesn't manage this, and is configured to ignore it
    A + moved_dir # added with history of where it came from
    M + moved_dir/README # added with history and has local modifications
    D stuff/fish.c # this file is scheduled for deletion
    A stuff/loot/bloo.h # this file is scheduled for addition
    C stuff/loot/lump.c # this file has conflicts from an update
    R xyz.c # this file is scheduled for replacement
    S stuff/squawk # this file or dir has been switched to a branch

    important windows folders ( revised )

    You could quickly get to those by Start - Run - paste folder

    :: where are the assemblies
    %ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.5
    :: where is the machine config file ?
    %windir%\Microsoft.NET\Framework\\config\machine.config
    ::where is the csc.exe
    dir %windir%\Microsoft.NET\Framework\*csc.exe /s /b
    %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe
    %windir%\Windows\Microsoft.NET\Framework\v3.5\csc.exe

    Windows Vista
    %AppData%\Microsoft\Windows\Recent
    Windows Vista's code snippets location for Visual Studio 2008
    C:\Users\%userName%\Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets
    C:\Users\%userName%\AppData\Local\Temp\Temporary ASP.NET Files

    class HowTo - revised



        using System.Text;
        using System.Diagnostics;
        
        namespace GenApp.Utils.Theory
        {
            /// <summary>
            /// This is fake class for quick copy paste. Usage: 
            /// type HowTo. - the intellisense will display the names you have figured out for each fake method 
            /// select the name from the     , click in it , right button , G , will get you there , 
            /// copy paste the text , Alt + F, C to close and remember to delete the fake call. 
            /// </summary>
            public class HowTo
            {
        
                public static void UseRegexesWithWhiteSpace ()
                {
                    //how-to use regexes with white space 
                    //                Regex re = new Regex( 
                    //                    @"           # This pattern matches Foo
                    //                        (?i)     # turn on insensitivity
                    //                                 # The Foo bit
                    //                        \b(Foo)\b "
                    //                , RegexOptions.IgnorePatternWhitespace ) ;
                    //                for ( Match m = re.Match( "foo bar Foo" ) ; m.Success ; m = m.NextMatch() ;
        
                } //eof method 
        
        
                public static void DisplayJavaScriptConfirmationDialog ()
                {
                    //Active_chkbox.Attributes.Add("OnClick" , "return (confirm('Do you want do disable this user'));");
                } //eof method 
        
                public static void RegisterPageStartUpScript ()
                {
        
                    //how-to Page.RegisterStartupScript(@"startup",@"<script>alert('Thank you!');</script>");
                    //string JaScript = "<script language=’javascript’> alert('User Details saved successfully') </script> " ;
                    //Response.Write( JaScript );
        
                } //eof method RegionsterPageStartUpScript
        
        
                public static void AddCallingMethodNameToDebug ()
                {
                    string code = @"
            System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace();
            string mName = st.GetFrame(1).GetMethod().Name; 
            ";
        
                } //eof method AddCallingMethodNameToDebug
        
        
                public static void SettersAndGetters ()
                {
                    string help = @"
        how-to generate those in textpad F8 
        how-to Generate member accessors , properties for C# asp.net with textpad 
        how-to setters and getters
        find:^(.*)$
        replace:private string _\1 ; \n public string \1 { \n \t\t get { return _\1 ; } \n \t\t set { _\1 = value ; } \n } //comm -- eof \1 property \n\n 
        find:^(.*) (.*)$
        private string s\1 ; \n public string \1 { \n \t\t get { return s\1 ; } \n \t\t set { s\1 = value ; } \n } //comm -- eof \1 property \n\n
        
        FIND:first remove all the [] from the copy paste of the table create screipt 
        ^\t\[([a-zA-Z_]*)\](.*)$
        FIND type and var
        ^(.*) (.*)$
        REPLACE Properties
        #region \2 \n private \1 _\2 ; \npublic \1 \2 { \n \t\t get { return _\2 ; } \n \t\t set { _\2 = value ; } \n } //eof property \2 \n\n\n #endregion \2 \n\
        
        //for the constructor 
        _\2= this.\2 ;
        
        //for the passing to the constuctor 
        \1 _\2 , 
        
        /* 
        ^(.*) (.*)$
        #region \2 \nprivate List<\1> _\2;\npublic List<\1> \2 { get { return _\2; } set { _\2 = value; } }\n#endregion \2\n\n
        
        ";
        
        
                } //eof method SettersAndGetters
        
        
        
                public static void ListAllDbObjects ()
                {
                    /*
                    --HOW-TO LIST ALL PROCEDURE IN A DATABASE
                    select s.name from sys.objects s where type = 'P' or type='UP'
                    -- GET THE GENERATED ONES ONLY 
                     select s.name from sysobjects s where type = 'P' and s.name like '%gsp%'
                    --HOW-TO LIST ALL TRIGGERS BY NAME IN A DATABASE
                    select s.name from sysobjects s where type = 'TR'
                    --HOW-TO LIST TABLES IN A DATABASE 
                    select s.name from sysobjects s where type = 'U'
                    --how-to list all system tables in a database
                    select s.name from sysobjects s where type = 's'
                    --how-to list all the views in a database
                    select s.name from sysobjects s where type = 'v'
        
        
                    Similarly you can find out other objects created by user, simple change type = 
        
                    C = CHECK constraint 
        
                    D = Default or DEFAULT constraint 
        
                    F = FOREIGN KEY constraint 
        
                    L = Log 
        
                    FN = Scalar function 
        
                    IF = In-lined table-function 
        
                    P = Stored procedure 
        
                    PK = PRIMARY KEY constraint (type is K) 
        
                    RF = Replication filter stored procedure
        
                    S = System table 
        
                    TF = Table function 
        
                    TR = Trigger 
        
                    U = User table ( this is the one I discussed above in the example)
        
                    UQ = UNIQUE constraint (type is K) 
        
                    V = View 
        
                    X = Extended stored procedure
                    */
                } //eof method 
        
                public static void GetProcedureMetaData ()
                {
                    string answer = @"
            select PARAMETER_NAME as 'COLUMN_NAME', DATA_TYPE ,  CHARACTER_MAXIMUM_LENGTH AS 'MAX_LENGTH', IS_RESULT , PARAMETER_MODE  from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='Login_Check'
            Select * from INFORMATION_SCHEMA.Routines --returns stored procedures and functions
        
            exec sp_HelpText 'Login_Check'
        
            ";
                    answer = string.Empty;
        
                } //eof method 
        
        
                public static void GetRowColumnValuesFromDs ()
                {
                    //(ds.Tables["TableName"].Rows[0]["ColumnName"] == DBNull.Value) ? false : (bool)ds.Tables["TableName"].Rows[0]["ColumnName"]; 
        
                } //eof method 
        
                public static void CopyMeAsTemplateMethod ()
                { } //eof method 
        
                public static void ReflectionExample ()
                {
        
                    //Type objectType = testObject.GetType();
        
                    //ConstructorInfo[] info = objectType.GetConstructors();
                    //MethodInfo[] methods = objectType.GetMethods();
        
                    //// get all the constructors
                    //Console.WriteLine("Constructors:");
                    //foreach (ConstructorInfo cf in info)
                    //{
                    //  Console.WriteLine(cf);
                    //}
        
                    //Console.WriteLine();
                    //// get all the methods
                    //Console.WriteLine("Methods:");
                    //foreach (MethodInfo mf in methods)
                    //{
                    //  Console.WriteLine(mf);
                    //}
        
        
        
        
                }
        
        
        
        
                public static void shortcuts ()
                {
                    string _shortcuts =
        
                    @"
            //how-to shortcuts 
        
        
            Ctrl + Shift + F -- recursive find 
            F3 -- find next occurence
            Ctrl + H -- find and replace
            Ctrl + M + M -- collapse method 
            Ctrl + B --- set a break point 
            CTRL + “-” and CTRL + SHIFT + “-” -- web browser like backward and forward in code
            Ctrl + Tab --- shift tabs
            Shift + F5 --- stop debugging 
            Ctrl + I --- fast search 
            F5 -- start debugging
            Tryf = try and finally block
            Prop = property with get and set accessor
            Switch = switch statement with default
            Alt + W , L -- close all windows 
            Alt + W , 1 -- open the first window
            Alt + F , F , 1 -- open the latest file I closed 
            Ctrl + F2 , Tab -- go to the methods dropdown , type a letter to get to the name of the method 
            Alt + L --- select the Solution Explorer
            Ctrl + Shift + Z --  press 2 (needs arsclip (google download arsclip)) -- get the second latest entry from my clipboard
        
        
            ";
        
                } //eof shortcuts
        
        
                public static void redirectToCurrentUrl ()
                {
                    string _redirectToCurrentUrl =
                    @"
        
            Response.Redirect ( System.IO.Path.GetFileName ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) , false );
        
            ";
                } //eof method 
        
        
                public static void formTypes ()
                {
                    string _formTypes =
                    @" 
            //how-to forms 1 - Empty Search Form , 2 - Filled Form , 3 - Empty New form ( new Margin Data , new Project )
            //how-to formTypes 
            //, 4 - filled search form from get by id procedure 
            // 5 - FilledSearchForm (coming from params)
        
            ";
                } //eof formTypes 
        
                public static void GetTheFileNameWithoutTheExtension ()
                {
                    /*                    
                    System.IO.Path.GetFileNameWithoutExtension ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) );
                     */
        
        
                } //eof methoed 
        
        
                public static void GetThePhysicalRootPathNoExtension ()
                {
                    //how-to get the physical root path on the file system of the application 
                    //Utils.Dbg.Debugger.WriteIf ( "My rootPath is " + rootPath );
                } //eof method 
        
                public static void AccessConfVariables ()
                {
                    //how-to access conf variables BL.Conf.Instance.Vars [ "varName" ] would give you "theVarName ;
                } //eof method 
        
                public static void GetRowColumnValue ()
                {
                    //how-to get row column value 
                    //(ds.Tables["TableName"].Rows[0]["ColumnName"] == DBNull.Value ) ? false : (bool)ds.Tables["TableName"].Rows[0]["ColumnName"] ; 
        
                } //eof method 
        
        
                public static void GenerateExtendedPropertiesForATable ()
                {
        
                    //table column
                    //find:^(.*) (.*)$
                    //Replace:
                    //EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'title="\2",visible="1",fs="Basic Details",readonly="1"' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'\1', @level2type=N'COLUMN',@level2name=N'\2'
                } //eof method 
        
        
        
                public static void RedirectToTheCurrentURL ()
                {
                    //how-to redirect to current url = users.aspx or projects.aspx 
                    /*
        
                    Response.Redirect( System.IO.Path.GetFileName ( System.Web.HttpContext.Current.Request.Url.AbsolutePath ) , false );
        
                     */
                } //eof method 
        
                public static void THEORY ()
                {
                    //EVENTS AND DELEGATES IN ASP.NET -- http://msdn.microsoft.com/en-us/library/17sde2xt.aspx
        
                } //eof method 
        
        
                public static void ReplaceDebugging ()
                {
                    /* find : replace 
                ^(.*)([^\/\/])(Utils\.Debugger)
                \t\t\t\t\t//Utils.Dbg.Debugger
                     */
                }
        
                public static void UseStringBuilderInsteadOfString ()
                {
                    //Bad
                    string s = "This ";
                    s += "is ";
                    s += "not ";
                    s += "the ";
                    s += "best ";
                    s += "way.";
        
                    //Good:
                    StringBuilder sb = new StringBuilder ();
                    sb.Append ( "This " );
                    sb.Append ( "is " );
                    sb.Append ( "much " );
                    sb.Append ( "better. " );
        
                } //eof method 
        
        
                public static void AssignValueIfNotNull ( string SomeValue )
                {
                    //Long
                    SomeObject SomeObject = new SomeObject ();
                    if (SomeValue == null)
                        SomeObject.Value = null;
                    else
                        SomeObject.Value = SomeValue;
        
                    //Instead of this:
                    SomeObject.Value = SomeValue ?? null;
                }
        
        
                public static void MeasureMethodPerformance ()
                {//source:http://stackoverflow.com/questions/28637/is-datetime-now-the-best-way-to-measure-a-functions-performance
                    Stopwatch sw = new Stopwatch ();
                    sw.Start ();
                    // Do Work
                    sw.Stop ();
                    string StrDebug = string.Format ( "Elapsed time: {0}", sw.Elapsed.TotalMilliseconds );
                    //Utils.Dbg.Debugger.WriteIf ( StrDebug );
                } //eof method 
        
        
                public static void GenerateResxFileOutOfListing ()
                {
        /*
        FIND:
        ^(.*)$
        REPLACE:
        <data name="\1" xml:space="preserve"> \n <value>value</value>\n <comment>comment</comment> \n</data>\n
        
        
        */
                
                } //eof method 
    
            public static void InsertCodeSnippet ()
            {
    
              /*CopyPasteTheFollowingCode into this folder (your milleage may vary ; )
               * C:\Users\%userName%\Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets
               * Save it as a file with the same title and type *.snippet
               <CodeSnippets
                  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
                  <CodeSnippet Format="1.0.0">
                      <Header>
                          <Title>
                             ThisIsTheTitleVisibleForIntellisense
                          </Title>
                      </Header>
                      <Snippet>
                          <Code Language="CSharp">
                              <![CDATA[
                    
                              Put the code here 
                    
                              ]]>
                          </Code>
                      </Snippet>
                  </CodeSnippet>
              </CodeSnippets>
              Use by : Type CTRL+K, CTRL+X, arrows to navigate , 
                         */
    
            }
            } //eof class 
                public class SomeObject
            {
                public string Value { get; set; }
            } //eof class 
        } //eof namespace

    5.03.2009

    ack - better than grep ?!

    SOURCES:
    http://ack.googlecode.com/svn/tags/latest/ack

    #!/usr/bin/env perl
    #
    # This file, ack, is generated code.
    # Please DO NOT EDIT or send patches for it.
    #
    # Please take a look at the source from
    # http://code.google.com/p/ack/source
    # and submit patches against the individual files
    # that build ack.
    #

    use warnings;
    use strict;

    our $VERSION = '1.88';
    # Check http://petdance.com/ack/ for updates

    # These are all our globals.


    MAIN: {
    if ( $App::Ack::VERSION ne $main::VERSION ) {
    App::Ack::die( "Program/library version mismatch\n\t$0 is $main::VERSION\n\t$INC{'App/Ack.pm'} is $App::Ack::VERSION" );
    }

    # Do preliminary arg checking;
    my $env_is_usable = 1;
    for ( @ARGV ) {
    last if ( $_ eq '--' );

    # Priorities! Get the --thpppt checking out of the way.
    /^--th[pt]+t+$/ && App::Ack::_thpppt($_);

    # See if we want to ignore the environment. (Don't tell Al Gore.)
    if ( $_ eq '--noenv' ) {
    my @keys = ( 'ACKRC', grep { /^ACK_/ } keys %ENV );
    delete @ENV{@keys};
    $env_is_usable = 0;
    }
    }
    unshift( @ARGV, App::Ack::read_ackrc() ) if $env_is_usable;
    App::Ack::load_colors();

    if ( exists $ENV{ACK_SWITCHES} ) {
    App::Ack::warn( 'ACK_SWITCHES is no longer supported. Use ACK_OPTIONS.' );
    }

    if ( !@ARGV ) {
    App::Ack::show_help();
    exit 1;
    }

    main();
    }

    sub main {
    my $opt = App::Ack::get_command_line_options();

    $| = 1 if $opt->{flush}; # Unbuffer the output if flush mode

    if ( -p STDIN ) { # Check to see if it's a pipe
    # We're going into filter mode
    for ( qw( f g l ) ) {
    $opt->{$_} and App::Ack::die( "Can't use -$_ when acting as a filter." );
    }
    $opt->{show_filename} = 0;
    $opt->{regex} = App::Ack::build_regex( defined $opt->{regex} ? $opt->{regex} : shift @ARGV, $opt );
    if ( my $nargs = @ARGV ) {
    my $s = $nargs == 1 ? '' : 's';
    App::Ack::warn( "Ignoring $nargs argument$s on the command-line while acting as a filter." );
    }
    my $res = App::Ack::Resource::Basic->new( '-' );
    App::Ack::search_resource( $res, $opt );
    $res->close();
    exit 0;
    }

    my $file_matching = $opt->{f} || $opt->{lines};
    if ( !$file_matching ) {
    @ARGV or App::Ack::die( 'No regular expression found.' );
    $opt->{regex} = App::Ack::build_regex( defined $opt->{regex} ? $opt->{regex} : shift @ARGV, $opt );
    }

    # check that all regexes do compile fine
    App::Ack::check_regex( $_ ) for ( $opt->{regex}, $opt->{G} );

    my $what = App::Ack::get_starting_points( \@ARGV, $opt );
    my $iter = App::Ack::get_iterator( $what, $opt );
    App::Ack::filetype_setup();

    my $nmatches = 0;

    App::Ack::set_up_pager( $opt->{pager} ) if defined $opt->{pager};
    if ( $opt->{f} ) {
    App::Ack::print_files( $iter, $opt );
    }
    elsif ( $opt->{l} || $opt->{count} ) {
    $nmatches = App::Ack::print_files_with_matches( $iter, $opt );
    }
    else {
    $nmatches = App::Ack::print_matches( $iter, $opt );
    }
    close $App::Ack::fh;
    exit ($nmatches ? 0 : 1);
    }

    =head1 NAME

    ack - grep-like text finder

    =head1 SYNOPSIS

    ack [options] PATTERN [FILE...]
    ack -f [options] [DIRECTORY...]

    =head1 DESCRIPTION

    Ack is designed as a replacement for 99% of the uses of F.

    Ack searches the named input FILEs (or standard input if no files are
    named, or the file name - is given) for lines containing a match to the
    given PATTERN. By default, ack prints the matching lines.

    Ack can also list files that would be searched, without actually searching
    them, to let you take advantage of ack's file-type filtering capabilities.

    =head1 FILE SELECTION

    I is intelligent about the files it searches. It knows about
    certain file types, based on both the extension on the file and,
    in some cases, the contents of the file. These selections can be
    made with the B<--type> option.

    With no file selections, I only searches files of types that
    it recognizes. If you have a file called F, and I
    doesn't know what a .wango file is, I won't search it.

    The B<-a> option tells I to select all files, regardless of
    type.

    Some files will never be selected by I, even with B<-a>,
    including:

    =over 4

    =item * Backup files: Files ending with F<~>, or F<#*#>

    =item * Coredumps: Files matching F

    =back

    However, I always searches the files given on the command line,
    no matter what type. Furthermore, by specifying the B<-u> option all
    files will be searched.

    =head1 DIRECTORY SELECTION

    I descends through the directory tree of the starting directories
    specified. However, it will ignore the shadow directories used by
    many version control systems, and the build directories used by the
    Perl MakeMaker system. You may add or remove a directory from this
    list with the B<--[no]ignore-dir> option. The option may be repeated
    to add/remove multiple directories from the ignore list.

    For a complete list of directories that do not get searched, run
    F.

    =head1 WHEN TO USE GREP

    I trumps I as an everyday tool 99% of the time, but don't
    throw I away, because there are times you'll still need it.

    E.g., searching through huge files looking for regexes that can be
    expressed with I syntax should be quicker with I.

    If your script or parent program uses I C<--quiet> or
    C<--silent> or needs exit 2 on IO error, use I.

    =head1 OPTIONS

    =over 4

    =item B<-a>, B<--all>

    Operate on all files, regardless of type (but still skip directories
    like F, F, etc.)

    =item B<-A I>, B<--after-context=I>

    Print I lines of trailing context after matching lines.

    =item B<-B I>, B<--before-context=I>

    Print I lines of leading context before matching lines.

    =item B<-C [I]>, B<--context[=I]>

    Print I lines (default 2) of context around matching lines.

    =item B<-c>, B<--count>

    Suppress normal output; instead print a count of matching lines for
    each input file. If B<-l> is in effect, it will only show the
    number of lines for each file that has lines matching. Without
    B<-l>, some line counts may be zeroes.

    =item B<--color>, B<--nocolor>

    B<--color> highlights the matching text. B<--nocolor> supresses
    the color. This is on by default unless the output is redirected.

    On Windows, this option is off by default unless the
    L module is installed or the C
    environment variable is used.

    =item B<--env>, B<--noenv>

    B<--noenv> disables all environment processing. No F<.ackrc> is read
    and all environment variables are ignored. By default, F considers
    F<.ackrc> and settings in the environment.

    =item B<--flush>

    B<--flush> flushes output immediately. This is off by default
    unless ack is running interactively (when output goes to a pipe
    or file).

    =item B<-f>

    Only print the files that would be searched, without actually doing
    any searching. PATTERN must not be specified, or it will be taken as
    a path to search.

    =item B<--follow>, B<--nofollow>

    Follow or don't follow symlinks, other than whatever starting files
    or directories were specified on the command line.

    This is off by default.

    =item B<-G I>

    Only paths matching I are included in the search. The entire
    path and filename are matched against I, and I is a
    Perl regular expression, not a shell glob.

    The options B<-i>, B<-w>, B<-v>, and B<-Q> do not apply to this I.

    =item B<-g I>

    Print files where the relative path + filename matches I. This option is
    a convenience shortcut for B<-f> B<-G I>.

    The options B<-i>, B<-w>, B<-v>, and B<-Q> do not apply to this I.

    =item B<--group>, B<--nogroup>

    B<--group> groups matches by file name with. This is the default when
    used interactively.

    B<--nogroup> prints one result per line, like grep. This is the default
    when output is redirected.

    =item B<-H>, B<--with-filename>

    Print the filename for each match.

    =item B<-h>, B<--no-filename>

    Suppress the prefixing of filenames on output when multiple files are
    searched.

    =item B<--help>

    Print a short help statement.

    =item B<-i>, B<--ignore-case>

    Ignore case in the search strings.

    This applies only to the PATTERN, not to the regexes given for the B<-g>
    and B<-G> options.

    =item B<--[no]ignore-dir=DIRNAME>

    Ignore directory (as CVS, .svn, etc are ignored). May be used multiple times
    to ignore multiple directories. For example, mason users may wish to include
    B<--ignore-dir=data>. The B<--noignore-dir> option allows users to search
    directories which would normally be ignored (perhaps to research the contents
    of F<.svn/props> directories).

    =item B<--line=I>

    Only print line I of each file. Multiple lines can be given with multiple
    B<--line> options or as a comma separated list (B<--line=3,5,7>). B<--line=4-7>
    also works. The lines are always output in ascending order, no matter the
    order given on the command line.

    =item B<-l>, B<--files-with-matches>

    Only print the filenames of matching files, instead of the matching text.

    =item B<-L>, B<--files-without-matches>

    Only print the filenames of files that do I match. This is equivalent
    to specifying B<-l> and B<-v>.

    =item B<--match I>

    Specify the I explicitly. This is helpful if you don't want to put the
    regex as your first argument, e.g. when executing multiple searches over the
    same set of files.

    # search for foo and bar in given files
    ack file1 t/file* --match foo
    ack file1 t/file* --match bar

    =item B<-m=I>, B<--max-count=I>

    Stop reading a file after I matches.

    =item B<--man>

    Print this manual page.

    =item B<-n>

    No descending into subdirectories.

    =item B<-o>

    Show only the part of each line matching PATTERN (turns off text
    highlighting)

    =item B<--output=I>

    Output the evaluation of I for each line (turns off text
    highlighting)

    =item B<--pager=I>

    Direct ack's output through I. This can also be specified
    via the C and C environment variables.

    Using --pager does not suppress grouping and coloring like piping
    output on the command-line does.

    =item B<--passthru>

    Prints all lines, whether or not they match the expression. Highlighting
    will still work, though, so it can be used to highlight matches while
    still seeing the entire file, as in:

    # Watch a log file, and highlight a certain IP address
    $ tail -f ~/access.log | ack --passthru 123.45.67.89

    =item B<--print0>

    Only works in conjunction with -f, -g, -l or -c (filename output). The filenames
    are output separated with a null byte instead of the usual newline. This is
    helpful when dealing with filenames that contain whitespace, e.g.

    # remove all files of type html
    ack -f --html --print0 | xargs -0 rm -f

    =item B<-Q>, B<--literal>

    Quote all metacharacters in PATTERN, it is treated as a literal.

    This applies only to the PATTERN, not to the regexes given for the B<-g>
    and B<-G> options.

    =item B<--smart-case>, B<--no-smart-case>

    Ignore case in the search strings if PATTERN contains no uppercase
    characters. This is similar to C in vim. This option is
    off by default.

    B<-i> always overrides this option.

    This applies only to the PATTERN, not to the regexes given for the
    B<-g> and B<-G> options.

    =item B<--sort-files>

    Sorts the found files lexically. Use this if you want your file
    listings to be deterministic between runs of I.

    =item B<--thpppt>

    Display the all-important Bill The Cat logo. Note that the exact
    spelling of B<--thpppppt> is not important. It's checked against
    a regular expression.

    =item B<--type=TYPE>, B<--type=noTYPE>

    Specify the types of files to include or exclude from a search.
    TYPE is a filetype, like I or I. B<--type=perl> can
    also be specified as B<--perl>, and B<--type=noperl> can be done
    as B<--noperl>.

    If a file is of both type "foo" and "bar", specifying --foo and
    --nobar will exclude the file, because an exclusion takes precedence
    over an inclusion.

    Type specifications can be repeated and are ORed together.

    See I for a list of valid types.

    =item B<--type-add I=I<.EXTENSION>[,I<.EXT2>[,...]]>

    Files with the given EXTENSION(s) are recognized as being of (the
    existing) type TYPE. See also L.


    =item B<--type-set I=I<.EXTENSION>[,I<.EXT2>[,...]]>

    Files with the given EXTENSION(s) are recognized as being of type
    TYPE. This replaces an existing definition for type TYPE. See also
    L.

    =item B<-u>, B<--unrestricted>

    All files and directories (including blib/, core.*, ...) are searched,
    nothing is skipped. When both B<-u> and B<--ignore-dir> are used, the
    B<--ignore-dir> option has no effect.

    =item B<-v>, B<--invert-match>

    Invert match: select non-matching lines

    This applies only to the PATTERN, not to the regexes given for the B<-g>
    and B<-G> options.

    =item B<--version>

    Display version and copyright information.

    =item B<-w>, B<--word-regexp>

    Force PATTERN to match only whole words. The PATTERN is wrapped with
    C<\b> metacharacters.

    This applies only to the PATTERN, not to the regexes given for the B<-g>
    and B<-G> options.

    =item B<-1>

    Stops after reporting first match of any kind. This is different
    from B<--max-count=1> or B<-m1>, where only one match per file is
    shown. Also, B<-1> works with B<-f> and B<-g>, where B<-m> does
    not.

    =back

    =head1 THE .ackrc FILE

    The F<.ackrc> file contains command-line options that are prepended
    to the command line before processing. Multiple options may live
    on multiple lines. Lines beginning with a # are ignored. A F<.ackrc>
    might look like this:

    # Always sort the files
    --sort-files

    # Always color, even if piping to a another program
    --color

    # Use "less -r" as my pager
    --pager=less -r

    Note that arguments with spaces in them do not need to be quoted,
    as they are not interpreted by the shell. Basically, each I
    in the F<.ackrc> file is interpreted as one element of C<@ARGV>.

    F looks in your home directory for the F<.ackrc>. You can
    specify another location with the F variable, below.

    If B<--noenv> is specified on the command line, the F<.ackrc> file
    is ignored.

    =head1 Defining your own types

    ack allows you to define your own types in addition to the predefined
    types. This is done with command line options that are best put into
    an F<.ackrc> file - then you do not have to define your types over and
    over again. In the following examples the options will always be shown
    on one command line so that they can be easily copy & pasted.

    I searches for foo in all perl files. I
    tells you, that perl files are files ending
    in .pl, .pm, .pod or .t. So what if you would like to include .xs
    files as well when searching for --perl files? I
    does this for you. B<--type-add> appends
    additional extensions to an existing type.

    If you want to define a new type, or completely redefine an existing
    type, then use B<--type-set>. I defines the type I to include files with
    the extensions .e or .eiffel. So to search for all eiffel files
    containing the word Bertrand use I.
    As usual, you can also write B<--type=eiffel>
    instead of B<--eiffel>. Negation also works, so B<--noeiffel> excludes
    all eiffel files from a search. Redefining also works: I
    and I<.xs> files no longer belong to the type I.

    When defining your own types in the F<.ackrc> file you have to use
    the following:

    --type-set=eiffel=.e,.eiffel

    or writing on separate lines

    --type-set
    eiffel=.e,.eiffel

    The following does B work in the F<.ackrc> file:

    --type-set eiffel=.e,.eiffel


    In order to see all currently defined types, use I<--help types>, e.g.
    I

    Restrictions:

    =over 4

    =item

    The types 'skipped', 'make', 'binary' and 'text' are considered "builtin" and
    cannot be altered.

    =item

    The shebang line recognition of the types 'perl', 'ruby', 'php', 'python',
    'shell' and 'xml' cannot be redefined by I<--type-set>, it is always
    active. However, the shebang line is only examined for files where the
    extension is not recognised. Therefore it is possible to say
    I and
    only find your shiny new I<.perl> files (and all files with unrecognized extension
    and perl on the shebang line).

    =back

    =head1 ENVIRONMENT VARIABLES

    For commonly-used ack options, environment variables can make life much easier.
    These variables are ignored if B<--noenv> is specified on the command line.

    =over 4

    =item ACKRC

    Specifies the location of the F<.ackrc> file. If this file doesn't
    exist, F looks in the default location.

    =item ACK_OPTIONS

    This variable specifies default options to be placed in front of
    any explicit options on the command line.

    =item ACK_COLOR_FILENAME

    Specifies the color of the filename when it's printed in B<--group>
    mode. By default, it's "bold green".

    The recognized attributes are clear, reset, dark, bold, underline,
    underscore, blink, reverse, concealed black, red, green, yellow,
    blue, magenta, on_black, on_red, on_green, on_yellow, on_blue,
    on_magenta, on_cyan, and on_white. Case is not significant.
    Underline and underscore are equivalent, as are clear and reset.
    The color alone sets the foreground color, and on_color sets the
    background color.

    =item ACK_COLOR_MATCH

    Specifies the color of the matching text when printed in B<--color>
    mode. By default, it's "black on_yellow".

    See B for the color specifications.

    =item ACK_PAGER

    Specifies a pager program, such as C, C or C, to which
    ack will send its output.

    Using C does not suppress grouping and coloring like
    piping output on the command-line does, except that on Windows
    ack will assume that C does not support color.

    C overrides C if both are specified.

    =item ACK_PAGER_COLOR

    Specifies a pager program that understands ANSI color sequences.
    Using C does not suppress grouping and coloring
    like piping output on the command-line does.

    If you are not on Windows, you never need to use C.

    =back

    =head1 ACK & OTHER TOOLS

    =head2 Vim integration

    F integrates easily with the Vim text editor. Set this in your
    F<.vimrc> to use F instead of F:

    set grepprg=ack\ -a

    That examples uses C<-a> to search through all files, but you may
    use other default flags. Now you can search with F and easily
    step through the results in Vim:

    :grep Dumper perllib

    =head2 Emacs integration

    Phil Jackson put together an F extension that "provides a
    simple compilation mode ... has the ability to guess what files you
    want to search for based on the major-mode."

    L

    =head2 TextMate integration

    Pedro Melo is a TextMate user who writes "I spend my day mostly
    inside TextMate, and the built-in find-in-project sucks with large
    projects. So I hacked a TextMate command that was using find +
    grep to use ack. The result is the Search in Project with ack, and
    you can find it here:
    L"

    =head2 Shell and Return Code

    For greater compatibility with I, I in normal use returns
    shell return or exit code of 0 only if something is found and 1 if
    no match is found.

    (Shell exit code 1 is C<$?=256> in perl with C or backticks.)

    The I code 2 for errors is not used.

    0 is returned if C<-f> or C<-g> are specified, irrespective of
    number of files found.

    =cut

    =head1 DEBUGGING ACK PROBLEMS

    If ack gives you output you're not expecting, start with a few simple steps.

    =head2 Use B<--noenv>

    Your environment variables and F<.ackrc> may be doing things you're
    not expecting, or forgotten you specified. Use B<--noenv> to ignore
    your environment and F<.ackrc>.

    =head2 Use B<-f> to see what files you're scanning

    The reason I created B<-f> in the first place was as a debugging
    tool. If ack is not finding matches you think it should find, run
    F to see what files are being checked.

    =head1 TIPS

    =head2 Use the F<.ackrc> file.

    The F<.ackrc> is the place to put all your options you use most of
    the time but don't want to remember. Put all your --type-add and
    --type-set definitions in it. If you like --smart-case, set it
    there, too. I also set --sort-files there.

    =head2 Use F<-f> for working with big codesets

    Ack does more than search files. C will create a
    list of all the Perl files in a tree, ideal for sending into F.
    For example:

    # Change all "this" to "that" in all Perl files in a tree.
    ack -f --perl | perl -p -i -e's/this/that/g'

    =head2 Use F<-Q> when in doubt about metacharacters

    If you're searching for something with a regular expression
    metacharacter, most often a period in a filename or IP address, add
    the -Q to avoid false positives without all the backslashing. See
    the following example for more...

    =head2 Use ack to watch log files

    Here's one I used the other day to find trouble spots for a website
    visitor. The user had a problem loading F, so I
    took the access log and scanned it with ack twice.

    ack -Q aa.bb.cc.dd /path/to/access.log | ack -Q -B5 troublesome.gif

    The first ack finds only the lines in the Apache log for the given
    IP. The second finds the match on my troublesome GIF, and shows
    the previous five lines from the log in each case.

    =head2 Share your knowledge

    Join the ack-users mailing list. Send me your tips and I may add
    them here.

    =head1 AUTHOR

    Andy Lester, C<< >>

    =head1 BUGS

    Please report any bugs or feature requests to the issues list at
    Google Code: L

    =head1 ENHANCEMENTS

    All enhancement requests MUST first be posted to the ack-users
    mailing list at L. I
    will not consider a request without it first getting seen by other
    ack users.

    There is a list of enhancements I want to make to F in the ack
    issues list at Google Code: L

    Patches are always welcome, but patches with tests get the most
    attention.

    =head1 SUPPORT

    Support for and information about F can be found at:

    =over 4

    =item * The ack homepage

    L

    =item * The ack issues list at Google Code

    L

    =item * AnnoCPAN: Annotated CPAN documentation

    L

    =item * CPAN Ratings

    L

    =item * Search CPAN

    L

    =item * Subversion repository

    L

    =back

    =head1 ACKNOWLEDGEMENTS

    How appropriate to have Inowledgements!

    Thanks to everyone who has contributed to ack in any way, including
    Sitaram Chamarty,
    Adam James,
    Richard Carlsson,
    Pedro Melo,
    AJ Schuster,
    Phil Jackson,
    Michael Schwern,
    Jan Dubois,
    Christopher J. Madsen,
    Matthew Wickline,
    David Dyck,
    Jason Porritt,
    Jjgod Jiang,
    Thomas Klausner,
    Uri Guttman,
    Peter Lewis,
    Kevin Riggle,
    Ori Avtalion,
    Torsten Blix,
    Nigel Metheringham,
    Gábor Szabó,
    Tod Hagan,
    Michael Hendricks,
    Ævar Arnfjörð Bjarmason,
    Piers Cawley,
    Stephen Steneker,
    Elias Lutfallah,
    Mark Leighton Fisher,
    Matt Diephouse,
    Christian Jaeger,
    Bill Sully,
    Bill Ricker,
    David Golden,
    Nilson Santos F. Jr,
    Elliot Shank,
    Merijn Broeren,
    Uwe Voelker,
    Rick Scott,
    Ask Bjørn Hansen,
    Jerry Gay,
    Will Coleda,
    Mike O'Regan,
    Slaven Rezić,
    Mark Stosberg,
    David Alan Pisoni,
    Adriano Ferreira,
    James Keenan,
    Leland Johnson,
    Ricardo Signes
    and Pete Krawczyk.

    =head1 COPYRIGHT & LICENSE

    Copyright 2005-2009 Andy Lester, all rights reserved.

    This program is free software; you can redistribute it and/or modify
    it under the terms of either:

    =over 4

    =item * the GNU General Public License as published by the Free
    Software Foundation; either version 1, or (at your option) any later
    version, or

    =item * the "Artistic License" which comes with Perl 5.

    =back

    =cut
    package File::Next;

    use strict;
    use warnings;


    our $VERSION = '1.02';



    use File::Spec ();


    our $name; # name of the current file
    our $dir; # dir of the current file

    our %files_defaults;
    our %skip_dirs;

    BEGIN {
    %files_defaults = (
    file_filter => undef,
    descend_filter => undef,
    error_handler => sub { CORE::die @_ },
    sort_files => undef,
    follow_symlinks => 1,
    );
    %skip_dirs = map {($_,1)} (File::Spec->curdir, File::Spec->updir);
    }


    sub files {
    my ($parms,@queue) = _setup( \%files_defaults, @_ );
    my $filter = $parms->{file_filter};

    return sub {
    while (@queue) {
    my ($dir,$file,$fullpath) = splice( @queue, 0, 3 );
    if ( -f $fullpath ) {
    if ( $filter ) {
    local $_ = $file;
    local $File::Next::dir = $dir;
    local $File::Next::name = $fullpath;
    next if not $filter->();
    }
    return wantarray ? ($dir,$file,$fullpath) : $fullpath;
    }
    elsif ( -d _ ) {
    unshift( @queue, _candidate_files( $parms, $fullpath ) );
    }
    } # while

    return;
    }; # iterator
    }







    sub sort_standard($$) { return $_[0]->[1] cmp $_[1]->[1] };
    sub sort_reverse($$) { return $_[1]->[1] cmp $_[0]->[1] };

    sub reslash {
    my $path = shift;

    my @parts = split( /\//, $path );

    return $path if @parts < 2; return File::Spec->catfile( @parts );
    }



    sub _setup {
    my $defaults = shift;
    my $passed_parms = ref $_[0] eq 'HASH' ? {%{+shift}} : {}; # copy parm hash

    my %passed_parms = %{$passed_parms};

    my $parms = {};
    for my $key ( keys %{$defaults} ) {
    $parms->{$key} =
    exists $passed_parms{$key}
    ? delete $passed_parms{$key}
    : $defaults->{$key};
    }

    # Any leftover keys are bogus
    for my $badkey ( keys %passed_parms ) {
    my $sub = (caller(1))[3];
    $parms->{error_handler}->( "Invalid option passed to $sub(): $badkey" );
    }

    # If it's not a code ref, assume standard sort
    if ( $parms->{sort_files} && ( ref($parms->{sort_files}) ne 'CODE' ) ) {
    $parms->{sort_files} = \&sort_standard;
    }
    my @queue;

    for ( @_ ) {
    my $start = reslash( $_ );
    if (-d $start) {
    push @queue, ($start,undef,$start);
    }
    else {
    push @queue, (undef,$start,$start);
    }
    }

    return ($parms,@queue);
    }


    sub _candidate_files {
    my $parms = shift;
    my $dir = shift;

    my $dh;
    if ( !opendir $dh, $dir ) {
    $parms->{error_handler}->( "$dir: $!" );
    return;
    }

    my @newfiles;
    my $descend_filter = $parms->{descend_filter};
    my $follow_symlinks = $parms->{follow_symlinks};
    my $sort_sub = $parms->{sort_files};

    while ( defined ( my $file = readdir $dh ) ) {
    next if $skip_dirs{$file};
    my $has_stat;

    # Only do directory checking if we have a descend_filter
    my $fullpath = File::Spec->catdir( $dir, $file );
    if ( !$follow_symlinks ) {
    next if -l $fullpath;
    $has_stat = 1;
    }

    if ( $descend_filter ) {
    if ( $has_stat ? (-d _) : (-d $fullpath) ) {
    local $File::Next::dir = $fullpath;
    local $_ = $file;
    next if not $descend_filter->();
    }
    }
    if ( $sort_sub ) {
    push( @newfiles, [ $dir, $file, $fullpath ] );
    }
    else {
    push( @newfiles, $dir, $file, $fullpath );
    }
    }
    closedir $dh;

    if ( $sort_sub ) {
    return map { @{$_} } sort $sort_sub @newfiles;
    }

    return @newfiles;
    }


    1; # End of File::Next
    package App::Ack;

    use warnings;
    use strict;




    our $VERSION;
    our $COPYRIGHT;
    BEGIN {
    $VERSION = '1.88';
    $COPYRIGHT = 'Copyright 2005-2009 Andy Lester, all rights reserved.';
    }

    our $fh;

    BEGIN {
    $fh = *STDOUT;
    }


    our %types;
    our %type_wanted;
    our %mappings;
    our %ignore_dirs;

    our $dir_sep_chars;
    our $is_cygwin;
    our $is_windows;
    our $to_screen;

    use File::Spec ();
    use File::Glob ':glob';
    use Getopt::Long ();

    BEGIN {
    %ignore_dirs = (
    '.bzr' => 'Bazaar',
    '.cdv' => 'Codeville',
    '~.dep' => 'Interface Builder',
    '~.dot' => 'Interface Builder',
    '~.nib' => 'Interface Builder',
    '~.plst' => 'Interface Builder',
    '.git' => 'Git',
    '.hg' => 'Mercurial',
    '.pc' => 'quilt',
    '.svn' => 'Subversion',
    blib => 'Perl module building',
    CVS => 'CVS',
    RCS => 'RCS',
    SCCS => 'SCCS',
    _darcs => 'darcs',
    _sgbak => 'Vault/Fortress',
    'autom4te.cache' => 'autoconf',
    'cover_db' => 'Devel::Cover',
    _build => 'Module::Build',
    );

    %mappings = (
    actionscript => [qw( as mxml )],
    asm => [qw( asm s )],
    batch => [qw( bat cmd )],
    binary => q{Binary files, as defined by Perl's -B op (default: off)},
    cc => [qw( c h xs )],
    cfmx => [qw( cfc cfm cfml )],
    cpp => [qw( cpp cc cxx m hpp hh h hxx )],
    csharp => [qw( cs )],
    css => [qw( css )],
    elisp => [qw( el )],
    erlang => [qw( erl hrl )],
    fortran => [qw( f f77 f90 f95 f03 for ftn fpp )],
    haskell => [qw( hs lhs )],
    hh => [qw( h )],
    html => [qw( htm html shtml xhtml )],
    java => [qw( java properties )],
    js => [qw( js )],
    jsp => [qw( jsp jspx jhtm jhtml )],
    lisp => [qw( lisp lsp )],
    lua => [qw( lua )],
    make => q{Makefiles},
    mason => [qw( mas mhtml mpl mtxt )],
    objc => [qw( m h )],
    objcpp => [qw( mm h )],
    ocaml => [qw( ml mli )],
    parrot => [qw( pir pasm pmc ops pod pg tg )],
    perl => [qw( pl pm pod t )],
    php => [qw( php phpt php3 php4 php5 )],
    plone => [qw( pt cpt metadata cpy py )],
    python => [qw( py )],
    rake => q{Rakefiles},
    ruby => [qw( rb rhtml rjs rxml erb rake )],
    scheme => [qw( scm )],
    shell => [qw( sh bash csh tcsh ksh zsh )],
    skipped => q{Files, but not directories, normally skipped by ack (default: off)},
    smalltalk => [qw( st )],
    sql => [qw( sql ctl )],
    tcl => [qw( tcl itcl itk )],
    tex => [qw( tex cls sty )],
    text => q{Text files, as defined by Perl's -T op (default: off)},
    tt => [qw( tt tt2 ttml )],
    vb => [qw( bas cls frm ctl vb resx )],
    vim => [qw( vim )],
    yaml => [qw( yaml yml )],
    xml => [qw( xml dtd xslt ent )],
    );

    while ( my ($type,$exts) = each %mappings ) {
    if ( ref $exts ) {
    for my $ext ( @{$exts} ) {
    push( @{$types{$ext}}, $type );
    }
    }
    }

    $is_cygwin = ($^O eq 'cygwin');
    $is_windows = ($^O =~ /MSWin32/);
    $to_screen = -t *STDOUT;
    $dir_sep_chars = $is_windows ? quotemeta( '\\/' ) : quotemeta( File::Spec->catfile( '', '' ) );
    }


    sub read_ackrc {
    my @files = ( $ENV{ACKRC} );
    my @dirs =
    $is_windows
    ? ( $ENV{HOME}, $ENV{USERPROFILE} )
    : ( '~', $ENV{HOME} );
    for my $dir ( grep { defined } @dirs ) {
    for my $file ( '.ackrc', '_ackrc' ) {
    push( @files, bsd_glob( "$dir/$file", GLOB_TILDE ) );
    }
    }
    for my $filename ( @files ) {
    if ( defined $filename && -e $filename ) {
    open( my $fh, '<', $filename ) or App::Ack::die( "$filename: $!\n" ); my @lines = grep { /./ && !/^\s*#/ } <$fh>;
    chomp @lines;
    close $fh or App::Ack::die( "$filename: $!\n" );

    return @lines;
    }
    }

    return;
    }


    sub get_command_line_options {
    my %opt = (
    pager => $ENV{ACK_PAGER_COLOR} || $ENV{ACK_PAGER},
    );

    my $getopt_specs = {
    1 => sub { $opt{1} = $opt{m} = 1 },
    'A|after-context=i' => \$opt{after_context},
    'B|before-context=i' => \$opt{before_context},
    'C|context:i' => sub { shift; my $val = shift; $opt{before_context} = $opt{after_context} = ($val || 2) },
    'a|all-types' => \$opt{all},
    'break!' => \$opt{break},
    c => \$opt{count},
    'color|colour!' => \$opt{color},
    count => \$opt{count},
    'env!' => sub { }, # ignore this option, it is handled beforehand
    f => \$opt{f},
    flush => \$opt{flush},
    'follow!' => \$opt{follow},
    'g=s' => sub { shift; $opt{G} = shift; $opt{f} = 1 },
    'G=s' => \$opt{G},
    'group!' => sub { shift; $opt{heading} = $opt{break} = shift },
    'heading!' => \$opt{heading},
    'h|no-filename' => \$opt{h},
    'H|with-filename' => \$opt{H},
    'i|ignore-case' => \$opt{i},
    'lines=s' => sub { shift; my $val = shift; push @{$opt{lines}}, $val },
    'l|files-with-matches' => \$opt{l},
    'L|files-without-match' => sub { $opt{l} = $opt{v} = 1 },
    'm|max-count=i' => \$opt{m},
    'match=s' => \$opt{regex},
    n => \$opt{n},
    o => sub { $opt{output} = '$&' },
    'output=s' => \$opt{output},
    'pager=s' => \$opt{pager},
    'nopager' => sub { $opt{pager} = undef },
    'passthru' => \$opt{passthru},
    'print0' => \$opt{print0},
    'Q|literal' => \$opt{Q},
    'smart-case!' => \$opt{smart_case},
    'sort-files' => \$opt{sort_files},
    'u|unrestricted' => \$opt{u},
    'v|invert-match' => \$opt{v},
    'w|word-regexp' => \$opt{w},

    'ignore-dirs=s' => sub { shift; my $dir = remove_dir_sep( shift ); $ignore_dirs{$dir} = '--ignore-dirs' },
    'noignore-dirs=s' => sub { shift; my $dir = remove_dir_sep( shift ); delete $ignore_dirs{$dir} },

    'version' => sub { print_version_statement(); exit 1; },
    'help|?:s' => sub { shift; show_help(@_); exit; },
    'help-types'=> sub { show_help_types(); exit; },
    'man' => sub { require Pod::Usage; Pod::Usage::pod2usage({-verbose => 2}); exit; },

    'type=s' => sub {
    # Whatever --type=xxx they specify, set it manually in the hash
    my $dummy = shift;
    my $type = shift;
    my $wanted = ($type =~ s/^no//) ? 0 : 1; # must not be undef later

    if ( exists $type_wanted{ $type } ) {
    $type_wanted{ $type } = $wanted;
    }
    else {
    App::Ack::die( qq{Unknown --type "$type"} );
    }
    }, # type sub
    };

    # Stick any default switches at the beginning, so they can be overridden
    # by the command line switches.
    unshift @ARGV, split( ' ', $ENV{ACK_OPTIONS} ) if defined $ENV{ACK_OPTIONS};

    # first pass through options, looking for type definitions
    def_types_from_ARGV();

    for my $i ( filetypes_supported() ) {
    $getopt_specs->{ "$i!" } = \$type_wanted{ $i };
    }


    my $parser = Getopt::Long::Parser->new();
    $parser->configure( 'bundling', 'no_ignore_case', );
    $parser->getoptions( %{$getopt_specs} ) or
    App::Ack::die( 'See ack --help or ack --man for options.' );

    my %defaults = (
    all => 0,
    color => $to_screen,
    follow => 0,
    break => $to_screen,
    heading => $to_screen,
    before_context => 0,
    after_context => 0,
    );
    if ( $is_windows && $defaults{color} && not $ENV{ACK_PAGER_COLOR} ) {
    if ( $ENV{ACK_PAGER} || not eval { require Win32::Console::ANSI } ) {
    $defaults{color} = 0;
    }
    }
    if ( $to_screen && $ENV{ACK_PAGER_COLOR} ) {
    $defaults{color} = 1;
    }

    while ( my ($key,$value) = each %defaults ) {
    if ( not defined $opt{$key} ) {
    $opt{$key} = $value;
    }
    }

    if ( defined $opt{m} && $opt{m} <= 0 ) { App::Ack::die( '-m must be greater than zero' ); } for ( qw( before_context after_context ) ) { if ( defined $opt{$_} && $opt{$_} < 0 ) { App::Ack::die( "--$_ may not be negative" ); } } if ( defined( my $val = $opt{output} ) ) { $opt{output} = eval qq[ sub { "$val" } ]; } if ( defined( my $l = $opt{lines} ) ) { # --line=1 --line=5 is equivalent to --line=1,5 my @lines = split( /,/, join( ',', @{$l} ) ); # --line=1-3 is equivalent to --line=1,2,3 @lines = map { my @ret; if ( /-/ ) { my ($from, $to) = split /-/, $_; if ( $from > $to ) {
    App::Ack::warn( "ignoring --line=$from-$to" );
    @ret = ();
    }
    else {
    @ret = ( $from .. $to );
    }
    }
    else {
    @ret = ( $_ );
    };
    @ret
    } @lines;

    if ( @lines ) {
    my %uniq;
    @uniq{ @lines } = ();
    $opt{lines} = [ sort { $a <=> $b } keys %uniq ]; # numerical sort and each line occurs only once!
    }
    else {
    # happens if there are only ignored --line directives
    App::Ack::die( 'All --line options are invalid.' );
    }
    }

    return \%opt;
    }


    sub def_types_from_ARGV {
    my @typedef;

    my $parser = Getopt::Long::Parser->new();
    # pass_through => leave unrecognized command line arguments alone
    # no_auto_abbrev => otherwise -c is expanded and not left alone
    $parser->configure( 'no_ignore_case', 'pass_through', 'no_auto_abbrev' );
    $parser->getoptions(
    'type-set=s' => sub { shift; push @typedef, ['c', shift] },
    'type-add=s' => sub { shift; push @typedef, ['a', shift] },
    ) or App::Ack::die( 'See ack --help or ack --man for options.' );

    for my $td (@typedef) {
    my ($type, $ext) = split /=/, $td->[1];

    if ( $td->[0] eq 'c' ) {
    # type-set
    if ( exists $mappings{$type} ) {
    # can't redefine types 'make', 'skipped', 'text' and 'binary'
    App::Ack::die( qq{--type-set: Builtin type "$type" cannot be changed.} )
    if ref $mappings{$type} ne 'ARRAY';

    delete_type($type);
    }
    }
    else {
    # type-add

    # can't append to types 'make', 'skipped', 'text' and 'binary'
    App::Ack::die( qq{--type-add: Builtin type "$type" cannot be changed.} )
    if exists $mappings{$type} && ref $mappings{$type} ne 'ARRAY';

    App::Ack::warn( qq{--type-add: Type "$type" does not exist, creating with "$ext" ...} )
    unless exists $mappings{$type};
    }

    my @exts = split /,/, $ext;
    s/^\.// for @exts;

    if ( !exists $mappings{$type} || ref($mappings{$type}) eq 'ARRAY' ) {
    push @{$mappings{$type}}, @exts;
    for my $e ( @exts ) {
    push @{$types{$e}}, $type;
    }
    }
    else {
    App::Ack::die( qq{Cannot append to type "$type".} );
    }
    }

    return;
    }


    sub delete_type {
    my $type = shift;

    App::Ack::die( qq{Internal error: Cannot delete builtin type "$type".} )
    unless ref $mappings{$type} eq 'ARRAY';

    delete $mappings{$type};
    delete $type_wanted{$type};
    for my $ext ( keys %types ) {
    $types{$ext} = [ grep { $_ ne $type } @{$types{$ext}} ];
    }
    }


    sub ignoredir_filter {
    return !exists $ignore_dirs{$_};
    }


    sub remove_dir_sep {
    my $path = shift;
    $path =~ s/[$dir_sep_chars]$//;

    return $path;
    }


    use constant TEXT => 'text';

    sub filetypes {
    my $filename = shift;

    return 'skipped' unless is_searchable( $filename );

    my $basename = $filename;
    $basename =~ s{.*[$dir_sep_chars]}{};

    return ('make',TEXT) if lc $basename eq 'makefile';
    return ('rake','ruby',TEXT) if lc $basename eq 'rakefile';

    # If there's an extension, look it up
    if ( $filename =~ m{\.([^\.$dir_sep_chars]+)$}o ) {
    my $ref = $types{lc $1};
    return (@{$ref},TEXT) if $ref;
    }

    # At this point, we can't tell from just the name. Now we have to
    # open it and look inside.

    return unless -e $filename;
    # From Elliot Shank:
    # I can't see any reason that -r would fail on these-- the ACLs look
    # fine, and no program has any of them open, so the busted Windows
    # file locking model isn't getting in there. If I comment the if
    # statement out, everything works fine
    # So, for cygwin, don't bother trying to check for readability.
    if ( !$is_cygwin ) {
    if ( !-r $filename ) {
    App::Ack::warn( "$filename: Permission denied" );
    return;
    }
    }

    return 'binary' if -B $filename;

    # If there's no extension, or we don't recognize it, check the shebang line
    my $fh;
    if ( !open( $fh, '<', $filename ) ) { App::Ack::warn( "$filename: $!" ); return; } my $header = <$fh>;
    close $fh;

    if ( $header =~ /^#!/ ) {
    return ($1,TEXT) if $header =~ /\b(ruby|p(?:erl|hp|ython))\b/;
    return ('shell',TEXT) if $header =~ /\b(?:ba|t?c|k|z)?sh\b/;
    }
    else {
    return ('xml',TEXT) if $header =~ /\Q{Q};
    if ( $opt->{w} ) {
    $str = "\\b$str" if $str =~ /^\w/;
    $str = "$str\\b" if $str =~ /\w$/;
    }

    my $regex_is_lc = $str eq lc $str;
    if ( $opt->{i} || ($opt->{smart_case} && $regex_is_lc) ) {
    $str = "(?i)$str";
    }

    return $str;
    }


    sub check_regex {
    my $regex = shift;

    return unless defined $regex;

    eval { qr/$regex/ };
    if ($@) {
    (my $error = $@) =~ s/ at \S+ line \d+.*//;
    chomp($error);
    App::Ack::die( "Invalid regex '$regex':\n $error" );
    }

    return;
    }




    sub warn {
    return CORE::warn( _my_program(), ': ', @_, "\n" );
    }


    sub die {
    return CORE::die( _my_program(), ': ', @_, "\n" );
    }

    sub _my_program {
    require File::Basename;
    return File::Basename::basename( $0 );
    }



    sub filetypes_supported {
    return keys %mappings;
    }

    sub _get_thpppt {
    my $y = q{_ /|,\\'!.x',=(www)=, U };
    $y =~ tr/,x!w/\nOo_/;
    return $y;
    }

    sub _thpppt {
    my $y = _get_thpppt();
    App::Ack::print( "$y ack $_[0]!\n" );
    exit 0;
    }

    sub _key {
    my $str = lc shift;
    $str =~ s/[^a-z]//g;

    return $str;
    }


    sub show_help {
    my $help_arg = shift || 0;

    return show_help_types() if $help_arg =~ /^types?/;

    my $ignore_dirs = _listify( sort { _key($a) cmp _key($b) } keys %ignore_dirs );

    App::Ack::print( <<"END_OF_HELP" ); Usage: ack [OPTION]... PATTERN [FILE] Search for PATTERN in each source file in the tree from cwd on down. If [FILES] is specified, then only those files/directories are checked. ack may also search STDIN, but only if no FILE are specified, or if one of FILES is "-". Default switches may be specified in ACK_OPTIONS environment variable or an .ackrc file. If you want no dependency on the environment, turn it off with --noenv. Example: ack -i select Searching: -i, --ignore-case Ignore case distinctions in PATTERN --[no]smart-case Ignore case distinctions in PATTERN, only if PATTERN contains no upper case Ignored if -i is specified -v, --invert-match Invert match: select non-matching lines -w, --word-regexp Force PATTERN to match only whole words -Q, --literal Quote all metacharacters; PATTERN is literal Search output: --line=NUM Only print line(s) NUM of each file -l, --files-with-matches Only print filenames containing matches -L, --files-without-match Only print filenames with no match -o Show only the part of a line matching PATTERN (turns off text highlighting) --passthru Print all lines, whether matching or not --output=expr Output the evaluation of expr for each line (turns off text highlighting) --match PATTERN Specify PATTERN explicitly. -m, --max-count=NUM Stop searching in each file after NUM matches -1 Stop searching after one match of any kind -H, --with-filename Print the filename for each match -h, --no-filename Suppress the prefixing filename on output -c, --count Show number of lines matching per file -A NUM, --after-context=NUM Print NUM lines of trailing context after matching lines. -B NUM, --before-context=NUM Print NUM lines of leading context before matching lines. -C [NUM], --context[=NUM] Print NUM lines (default 2) of output context. --print0 Print null byte as separator between filenames, only works with -f, -g, -l, -L or -c. File presentation: --pager=COMMAND Pipes all ack output through COMMAND. Ignored if output is redirected. --nopager Do not send output through a pager. Cancels any setting in ~/.ackrc, ACK_PAGER or ACK_PAGER_COLOR. --[no]heading Print a filename heading above each file's results. (default: on when used interactively) --[no]break Print a break between results from different files. (default: on when used interactively) --group Same as --heading --break --nogroup Same as --noheading --nobreak --[no]color Highlight the matching text (default: on unless output is redirected, or on Windows) --[no]colour Same as --[no]color --flush Flush output immediately, even when ack is used non-interactively (when output goes to a pipe or file). File finding: -f Only print the files found, without searching. The PATTERN must not be specified. -g REGEX Same as -f, but only print files matching REGEX. --sort-files Sort the found files lexically. File inclusion/exclusion: -a, --all-types All file types searched; Ignores CVS, .svn and other ignored directories -u, --unrestricted All files and directories searched --[no]ignore-dir=name Add/Remove directory from the list of ignored dirs -n No descending into subdirectories -G REGEX Only search files that match REGEX --perl Include only Perl files. --type=perl Include only Perl files. --noperl Exclude Perl files. --type=noperl Exclude Perl files. See "ack --help type" for supported filetypes. --type-set TYPE=.EXTENSION[,.EXT2[,...]] Files with the given EXTENSION(s) are recognized as being of type TYPE. This replaces an existing definition for type TYPE. --type-add TYPE=.EXTENSION[,.EXT2[,...]] Files with the given EXTENSION(s) are recognized as being of (the existing) type TYPE --[no]follow Follow symlinks. Default is off. Directories ignored by default: $ignore_dirs Files not checked for type: /~\$/ - Unix backup files /#.+#\$/ - Emacs swap files /[._].*\\.swp\$/ - Vi(m) swap files /core\\.\\d+\$/ - core dumps Miscellaneous: --noenv Ignore environment variables and ~/.ackrc --help This help --man Man page --version Display version & copyright --thpppt Bill the Cat Exit status is 0 if match, 1 if no match. This is version $VERSION of ack. END_OF_HELP return; } sub show_help_types { App::Ack::print( <<'END_OF_HELP' ); Usage: ack [OPTION]... PATTERN [FILES] The following is the list of filetypes supported by ack. You can specify a file type with the --type=TYPE format, or the --TYPE format. For example, both --type=perl and --perl work. Note that some extensions may appear in multiple types. For example, .pod files are both Perl and Parrot. END_OF_HELP my @types = filetypes_supported(); my $maxlen = 0; for ( @types ) { $maxlen = length if $maxlen < length; } for my $type ( sort @types ) { next if $type =~ /^-/; # Stuff to not show my $ext_list = $mappings{$type}; if ( ref $ext_list ) { $ext_list = join( ' ', map { ".$_" } @{$ext_list} ); } App::Ack::print( sprintf( " --[no]%-*.*s %s\n", $maxlen, $maxlen, $type, $ext_list ) ); } return; } sub _listify { my @whats = @_; return '' if !@whats; my $end = pop @whats; my $str = @whats ? join( ', ', @whats ) . " and $end" : $end; no warnings 'once'; require Text::Wrap; $Text::Wrap::columns = 75; return Text::Wrap::wrap( '', ' ', $str ); } sub get_version_statement { my $copyright = get_copyright(); return <<"END_OF_VERSION"; ack $VERSION $copyright This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. END_OF_VERSION } sub print_version_statement { App::Ack::print( get_version_statement() ); return; } sub get_copyright { return $COPYRIGHT; } sub load_colors { eval 'use Term::ANSIColor ()'; $ENV{ACK_COLOR_MATCH} ||= 'black on_yellow'; $ENV{ACK_COLOR_FILENAME} ||= 'bold green'; return; } sub is_interesting { return if /^\./; my $include; for my $type ( filetypes( $File::Next::name ) ) { if ( defined $type_wanted{$type} ) { if ( $type_wanted{$type} ) { $include = 1; } else { return; } } } return $include; } # print subs added in order to make it easy for a third party # module (such as App::Wack) to redefine the display methods # and show the results in a different way. sub print { print {$fh} @_ } sub print_first_filename { App::Ack::print( $_[0], "\n" ) } sub print_blank_line { App::Ack::print( "\n" ) } sub print_separator { App::Ack::print( "--\n" ) } sub print_filename { App::Ack::print( $_[0], $_[1] ) } sub print_line_no { App::Ack::print( $_[0], $_[1] ) } sub print_count { my $filename = shift; my $nmatches = shift; my $ors = shift; my $count = shift; App::Ack::print( $filename ); App::Ack::print( ':', $nmatches ) if $count; App::Ack::print( $ors ); } sub print_count0 { my $filename = shift; my $ors = shift; App::Ack::print( $filename, ':0', $ors ); } { my $filename; my $regex; my $display_filename; my $keep_context; my $last_output_line; # number of the last line that has been output my $any_output; # has there been any output for the current file yet my $context_overall_output_count; # has there been any output at all sub search_resource { my $res = shift; my $opt = shift; $filename = $res->name();

    my $v = $opt->{v};
    my $passthru = $opt->{passthru};
    my $max = $opt->{m};
    my $nmatches = 0;

    $display_filename = undef;

    # for --line processing
    my $has_lines = 0;
    my @lines;
    if ( defined $opt->{lines} ) {
    $has_lines = 1;
    @lines = ( @{$opt->{lines}}, -1 );
    undef $regex; # Don't match when printing matching line
    }
    else {
    $regex = qr/$opt->{regex}/;
    }

    # for context processing
    $last_output_line = -1;
    $any_output = 0;
    my $before_context = $opt->{before_context};
    my $after_context = $opt->{after_context};

    $keep_context = ($before_context || $after_context) && !$passthru;

    my @before;
    my $before_starts_at_line;
    my $after = 0; # number of lines still to print after a match

    while ( $res->next_text ) {
    # XXX Optimize away the case when there are no more @lines to find.
    # XXX $has_lines, $passthru and $v never change. Optimize.
    if ( $has_lines
    ? $. != $lines[0] # $lines[0] should be a scalar
    : $v ? m/$regex/ : !m/$regex/ ) {
    if ( $passthru ) {
    App::Ack::print( $_ );
    next;
    }

    if ( $keep_context ) {
    if ( $after ) {
    print_match_or_context( $opt, 0, $., $_ );
    $after--;
    }
    elsif ( $before_context ) {
    if ( @before ) {
    if ( @before >= $before_context ) {
    shift @before;
    ++$before_starts_at_line;
    }
    }
    else {
    $before_starts_at_line = $.;
    }
    push @before, $_;
    }
    last if $max && ( $nmatches >= $max ) && !$after;
    }
    next;
    } # not a match

    ++$nmatches;

    # print an empty line as a divider before first line in each file (not before the first file)
    if ( !$any_output && $opt->{show_filename} && $opt->{break} && defined( $context_overall_output_count ) ) {
    App::Ack::print_blank_line();
    }

    shift @lines if $has_lines;

    if ( $res->is_binary ) {
    App::Ack::print( "Binary file $filename matches\n" );
    last;
    }
    if ( $keep_context ) {
    if ( @before ) {
    print_match_or_context( $opt, 0, $before_starts_at_line, @before );
    @before = ();
    $before_starts_at_line = 0;
    }
    if ( $max && $nmatches > $max ) {
    --$after;
    }
    else {
    $after = $after_context;
    }
    }
    print_match_or_context( $opt, 1, $., $_ );

    last if $max && ( $nmatches >= $max ) && !$after;
    } # while

    return $nmatches;
    } # search_resource()



    sub print_match_or_context {
    my $opt = shift; # opts array
    my $is_match = shift; # is there a match on the line?
    my $line_no = shift;

    my $color = $opt->{color};
    my $heading = $opt->{heading};
    my $show_filename = $opt->{show_filename};

    if ( $show_filename ) {
    if ( not defined $display_filename ) {
    $display_filename =
    $color
    ? Term::ANSIColor::colored( $filename, $ENV{ACK_COLOR_FILENAME} )
    : $filename;
    if ( $heading && !$any_output ) {
    App::Ack::print_first_filename($display_filename);
    }
    }
    }

    my $sep = $is_match ? ':' : '-';
    my $output_func = $opt->{output};
    for ( @_ ) {
    if ( $keep_context && !$output_func ) {
    if ( ( $last_output_line != $line_no - 1 ) &&
    ( $any_output || ( !$heading && defined( $context_overall_output_count ) ) ) ) {
    App::Ack::print_separator();
    }
    # to ensure separators between different files when --noheading

    $last_output_line = $line_no;
    }

    if ( $show_filename ) {
    App::Ack::print_filename($display_filename, $sep) if not $heading;
    App::Ack::print_line_no($line_no, $sep);
    }

    if ( $output_func ) {
    while ( /$regex/go ) {
    App::Ack::print( $output_func->() . "\n" );
    }
    }
    else {
    if ( $color && $is_match && $regex &&
    s/$regex/Term::ANSIColor::colored( substr($_, $-[0], $+[0] - $-[0]), $ENV{ACK_COLOR_MATCH} )/eg ) {
    # At the end of the line reset the color and remove newline
    s/[\r\n]*\z/\e[0m\e[K/;
    }
    else {
    # remove any kind of newline at the end of the line
    s/[\r\n]*\z//;
    }
    App::Ack::print($_ . "\n");
    }
    $any_output = 1;
    ++$context_overall_output_count;
    ++$line_no;
    }

    return;
    } # print_match_or_context()

    } # scope around search_resource() and print_match_or_context()



    sub search_and_list {
    my $res = shift;
    my $opt = shift;

    my $nmatches = 0;
    my $count = $opt->{count};
    my $ors = $opt->{print0} ? "\0" : "\n"; # output record separator

    my $regex = qr/$opt->{regex}/;

    if ( $opt->{v} ) {
    while ( $res->next_text ) {
    if ( /$regex/ ) {
    return 0 unless $count;
    }
    else {
    ++$nmatches;
    }
    }
    }
    else {
    while ( $res->next_text ) {
    if ( /$regex/ ) {
    ++$nmatches;
    last unless $count;
    }
    }
    }

    if ( $nmatches ) {
    App::Ack::print_count( $res->name, $nmatches, $ors, $count );
    }
    elsif ( $count && !$opt->{l} ) {
    App::Ack::print_count0( $res->name, $ors );
    }

    return $nmatches ? 1 : 0;
    } # search_and_list()



    sub filetypes_supported_set {
    return grep { defined $type_wanted{$_} && ($type_wanted{$_} == 1) } filetypes_supported();
    }



    sub print_files {
    my $iter = shift;
    my $opt = shift;

    my $ors = $opt->{print0} ? "\0" : "\n";

    while ( defined ( my $file = $iter->() ) ) {
    App::Ack::print $file, $ors;
    last if $opt->{1};
    }

    return;
    }


    sub print_files_with_matches {
    my $iter = shift;
    my $opt = shift;

    my $nmatches = 0;
    while ( defined ( my $filename = $iter->() ) ) {
    my $repo = App::Ack::Repository::Basic->new( $filename );
    my $res;
    while ( $res = $repo->next_resource() ) {
    $nmatches += search_and_list( $res, $opt );
    $res->close();
    last if $nmatches && $opt->{1};
    }
    $repo->close();
    }

    return $nmatches;
    }


    sub print_matches {
    my $iter = shift;
    my $opt = shift;

    $opt->{show_filename} = 0 if $opt->{h};
    $opt->{show_filename} = 1 if $opt->{H};

    my $nmatches = 0;
    while ( defined ( my $filename = $iter->() ) ) {
    my $repo;
    if ( $filename =~ /\.tar\.gz$/ ) {
    App::Ack::die( 'Not working here yet' );
    require App::Ack::Repository::Tar; # XXX Error checking
    $repo = App::Ack::Repository::Tar->new( $filename );
    }
    else {
    $repo = App::Ack::Repository::Basic->new( $filename );
    }
    $repo or next;

    while ( my $res = $repo->next_resource() ) {
    my $needs_line_scan;
    if ( $opt->{regex} && !$opt->{passthru} ) {
    $needs_line_scan = $res->needs_line_scan( $opt );
    if ( $needs_line_scan ) {
    $res->reset();
    }
    }
    else {
    $needs_line_scan = 1;
    }
    if ( $needs_line_scan ) {
    $nmatches += search_resource( $res, $opt );
    }
    $res->close();
    }
    last if $nmatches && $opt->{1};
    $repo->close();
    }
    return $nmatches;
    }


    sub filetype_setup {
    my $filetypes_supported_set = filetypes_supported_set();
    # If anyone says --no-whatever, we assume all other types must be on.
    if ( !$filetypes_supported_set ) {
    for my $i ( keys %type_wanted ) {
    $type_wanted{$i} = 1 unless ( defined( $type_wanted{$i} ) || $i eq 'binary' || $i eq 'text' || $i eq 'skipped' );
    }
    }
    return;
    }


    EXPAND_FILENAMES_SCOPE: {
    my $filter;

    sub expand_filenames {
    my $argv = shift;

    my $attr;
    my @files;

    foreach my $pattern ( @{$argv} ) {
    my @results = bsd_glob( $pattern );

    if (@results == 0) {
    @results = $pattern; # Glob didn't match, pass it thru unchanged
    }
    elsif ( (@results > 1) or ($results[0] ne $pattern) ) {
    if (not defined $filter) {
    eval 'require Win32::File;';
    if ($@) {
    $filter = 0;
    }
    else {
    $filter = Win32::File::HIDDEN()|Win32::File::SYSTEM();
    }
    } # end unless we've tried to load Win32::File
    if ( $filter ) {
    # Filter out hidden and system files:
    @results = grep { not(Win32::File::GetAttributes($_, $attr) and $attr & $filter) } @results;
    App::Ack::warn( "$pattern: Matched only hidden files" ) unless @results;
    } # end if we can filter by file attributes
    } # end elsif this pattern got expanded

    push @files, @results;
    } # end foreach pattern

    return \@files;
    } # end expand_filenames
    } # EXPAND_FILENAMES_SCOPE



    sub get_starting_points {
    my $argv = shift;
    my $opt = shift;

    my @what;

    if ( @{$argv} ) {
    @what = @{ $is_windows ? expand_filenames($argv) : $argv };
    $_ = File::Next::reslash( $_ ) for @what;

    # Show filenames unless we've specified one single file
    $opt->{show_filename} = (@what > 1) || (!-f $what[0]);
    }
    else {
    @what = '.'; # Assume current directory
    $opt->{show_filename} = 1;
    }

    for my $start_point (@what) {
    App::Ack::warn( "$start_point: No such file or directory" ) unless -e $start_point;
    }
    return \@what;
    }



    sub get_iterator {
    my $what = shift;
    my $opt = shift;

    # Starting points are always searched, no matter what
    my %starting_point = map { ($_ => 1) } @{$what};

    my $g_regex = defined $opt->{G} ? qr/$opt->{G}/ : undef;
    my $file_filter;

    if ( $g_regex ) {
    $file_filter
    = $opt->{u} ? sub { $File::Next::name =~ /$g_regex/ } # XXX Maybe this should be a 1, no?
    : $opt->{all} ? sub { $starting_point{ $File::Next::name } || ( $File::Next::name =~ /$g_regex/ && is_searchable( $File::Next::name ) ) }
    : sub { $starting_point{ $File::Next::name } || ( $File::Next::name =~ /$g_regex/ && is_interesting( @_ ) ) }
    ;
    }
    else {
    $file_filter
    = $opt->{u} ? sub {1}
    : $opt->{all} ? sub { $starting_point{ $File::Next::name } || is_searchable( $File::Next::name ) }
    : sub { $starting_point{ $File::Next::name } || is_interesting( @_ ) }
    ;
    }

    my $descend_filter
    = $opt->{n} ? sub {0}
    : $opt->{u} ? sub {1}
    : \&ignoredir_filter;

    my $iter =
    File::Next::files( {
    file_filter => $file_filter,
    descend_filter => $descend_filter,
    error_handler => sub { my $msg = shift; App::Ack::warn( $msg ) },
    sort_files => $opt->{sort_files},
    follow_symlinks => $opt->{follow},
    }, @{$what} );
    return $iter;
    }


    sub set_up_pager {
    my $command = shift;

    return unless $to_screen;

    my $pager;
    if ( not open( $pager, '|-', $command ) ) {
    App::Ack::die( qq{Unable to pipe to pager "$command": $!} );
    }
    $fh = $pager;

    return;
    }


    1; # End of App::Ack
    package App::Ack::Repository;


    use warnings;
    use strict;

    sub FAIL {
    require Carp;
    Carp::confess( 'Must be overloaded' );
    }


    sub new {
    FAIL();
    }


    sub next_resource {
    FAIL();
    }


    sub close {
    FAIL();
    }

    1;
    package App::Ack::Resource;


    use warnings;
    use strict;

    sub FAIL {
    require Carp;
    Carp::confess( 'Must be overloaded' );
    }


    sub new {
    FAIL();
    }


    sub name {
    FAIL();
    }


    sub is_binary {
    FAIL();
    }



    sub needs_line_scan {
    FAIL();
    }


    sub reset {
    FAIL();
    }


    sub next_text {
    FAIL();
    }


    sub close {
    FAIL();
    }

    1;
    package App::Ack::Plugin::Basic;



    package App::Ack::Resource::Basic;


    use warnings;
    use strict;


    our @ISA = qw( App::Ack::Resource );


    sub new {
    my $class = shift;
    my $filename = shift;

    my $self = bless {
    filename => $filename,
    fh => undef,
    could_be_binary => undef,
    opened => undef,
    id => undef,
    }, $class;

    if ( $self->{filename} eq '-' ) {
    $self->{fh} = *STDIN;
    $self->{could_be_binary} = 0;
    }
    else {
    if ( !open( $self->{fh}, '<', $self->{filename} ) ) {
    App::Ack::warn( "$self->{filename}: $!" );
    return;
    }
    $self->{could_be_binary} = 1;
    }

    return $self;
    }


    sub name {
    my $self = shift;

    return $self->{filename};
    }


    sub is_binary {
    my $self = shift;

    if ( $self->{could_be_binary} ) {
    return -B $self->{filename};
    }

    return 0;
    }



    sub needs_line_scan {
    my $self = shift;
    my $opt = shift;

    return 1 if $opt->{v};

    my $size = -s $self->{fh};
    if ( $size == 0 ) {
    return 0;
    }
    elsif ( $size > 100_000 ) {
    return 1;
    }

    my $buffer;
    my $rc = sysread( $self->{fh}, $buffer, $size );
    if ( not defined $rc ) {
    App::Ack::warn( "$self->{filename}: $!" );
    return 1;
    }
    return 0 unless $rc && ( $rc == $size );

    my $regex = $opt->{regex};
    return $buffer =~ /$regex/m;
    }


    sub reset {
    my $self = shift;

    seek( $self->{fh}, 0, 0 )
    or App::Ack::warn( "$self->{filename}: $!" );

    return;
    }


    sub next_text {
    if ( defined ($_ = readline $_[0]->{fh}) ) {
    $. = ++$_[0]->{line};
    return 1;
    }

    return;
    }


    sub close {
    my $self = shift;

    if ( not close $self->{fh} ) {
    App::Ack::warn( $self->name() . ": $!" );
    }

    return;
    }

    package App::Ack::Repository::Basic;


    our @ISA = qw( App::Ack::Repository );


    use warnings;
    use strict;

    sub new {
    my $class = shift;
    my $filename = shift;

    my $self = bless {
    filename => $filename,
    nexted => 0,
    }, $class;

    return $self;
    }


    sub next_resource {
    my $self = shift;

    return if $self->{nexted};
    $self->{nexted} = 1;

    return App::Ack::Resource::Basic->new( $self->{filename} );
    }


    sub close {
    }



    1;

    how-to set the log Level of log4net dynamically - console example with configuration

    source:
    log4net and changing the logger levels



    //this is the xml added replace here your log4net and Nunit paths
    //<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
            //  <SpecificVersion>False</SpecificVersion>
            //  <HintPath>..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath>
            //</Reference>
            //<Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    using log4net;
    using log4net.Config;
    using NUnit.Framework;
    
    namespace ExampleConsoleApplication
    {
      enum DebugLevel : int
      { 
        Fatal_Msgs = 0 , 
        Fatal_Error_Msgs = 1 , 
        Fatal_Error_Warn_Msgs = 2 , 
        Fatal_Error_Warn_Info_Msgs = 3 ,
        Fatal_Error_Warn_Info_Debug_Msgs = 4 
      }
        
    
        class TestClass
        {
    
            private static readonly ILog logger =
                     LogManager.GetLogger ( typeof ( TestClass ) );
    
    
            static void Main ( string[] args )
            {
          TestClass objTestClass = new TestClass ();
    
                Console.WriteLine ( " START " );
    
          int shouldLog = 4; //CHANGE THIS FROM 0 TO 4 integer to check the functionality of the example
          //0 -- prints only FATAL messages 
          //1 -- prints FATAL and ERROR messages 
          //2 -- prints FATAL , ERROR and WARN messages 
          //3 -- prints FATAL  , ERROR , WARN and INFO messages 
          //4 -- prints FATAL  , ERROR , WARN , INFO and DEBUG messages 
    
          string srtLogLevel = String.Empty ; 
          switch (shouldLog)
          {
            case (int)DebugLevel.Fatal_Msgs :
              srtLogLevel = "FATAL";
              break;
            case (int)DebugLevel.Fatal_Error_Msgs:
              srtLogLevel = "ERROR";
              break;
            case (int)DebugLevel.Fatal_Error_Warn_Msgs :
              srtLogLevel = "WARN";
              break;
            case (int)DebugLevel.Fatal_Error_Warn_Info_Msgs :
              srtLogLevel = "INFO"; 
              break;
            case (int)DebugLevel.Fatal_Error_Warn_Info_Debug_Msgs :
              srtLogLevel = "DEBUG" ;
              break ;
            default:
              srtLogLevel = "FATAL";
              break;
          }
    
            objTestClass.SetLogingLevel ( srtLogLevel );
     
    
          objTestClass.LogSomething ();
    
    
                Console.WriteLine ( " END HIT A KEY TO EXIT " );
                Console.ReadLine ();
                } //eof method 
    
        /// <summary>
        /// Activates debug level 
        /// </summary>
        /// <sourceurl>http://geekswithblogs.net/rakker/archive/2007/08/22/114900.aspx</sourceurl>
        private void SetLogingLevel ( string strLogLevel )
        {
         string strChecker = "WARN_INFO_DEBUG_ERROR_FATAL" ;
    
          if (String.IsNullOrEmpty ( strLogLevel ) == true || strChecker.Contains ( strLogLevel ) == false)
            throw new Exception ( " The strLogLevel should be set to WARN , INFO , DEBUG ," );
    
          
    
          log4net.Repository.ILoggerRepository[] repositories = log4net.LogManager.GetAllRepositories ();
    
          //Configure all loggers to be at the debug level.
          foreach (log4net.Repository.ILoggerRepository repository in repositories)
          {
            repository.Threshold = repository.LevelMap[ strLogLevel ];
            log4net.Repository.Hierarchy.Hierarchy hier = (log4net.Repository.Hierarchy.Hierarchy)repository;
            log4net.Core.ILogger[] loggers = hier.GetCurrentLoggers ();
            foreach (log4net.Core.ILogger logger in loggers)
            {
              ( (log4net.Repository.Hierarchy.Logger)logger ).Level = hier.LevelMap[ strLogLevel ];
            }
          }
    
          //Configure the root logger.
          log4net.Repository.Hierarchy.Hierarchy h = (log4net.Repository.Hierarchy.Hierarchy)log4net.LogManager.GetRepository ();
          log4net.Repository.Hierarchy.Logger rootLogger = h.Root;
          rootLogger.Level = h.LevelMap[ strLogLevel ];
        }
    
        private void LogSomething ()
        {
          #region LoggerUsage
          DOMConfigurator.Configure (); //tis configures the logger 
          logger.Debug ( "Here is a debug log." );
          logger.Info ( "... and an Info log." );
          logger.Warn ( "... and a warning." );
          logger.Error ( "... and an error." );
          logger.Fatal ( "... and a fatal error." );
          #endregion LoggerUsage
    
        }
        } //eof class 
    
    } //eof namespace 
    
    
    
    
    
    
    #region TheAppConfig
    /*
     <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="log4net"
                     type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
        <log4net>
            <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
                <param name="File" value="LogTest2.txt" />
                <param name="AppendToFile" value="true" />
                <layout type="log4net.Layout.PatternLayout">
                    <param name="Header" value="[Header] \r\n" />
                    <param name="Footer" value="[Footer] \r\n" />
                    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
                </layout>
            </appender>
    
            <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
                <mapping>
                    <level value="ERROR" />
                    <foreColor value="White" />
                    <backColor value="Red, HighIntensity" />
                </mapping>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
                </layout>
            </appender>
    
    
            <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
                <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.2.10.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                <connectionString value="data source=ysg;initial catalog=DBGA_DEV;integrated security=true;persist security info=True;" />
                <commandText value="INSERT INTO [DBGA_DEV].[ga].[tb_Data_Log] ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
                
                <parameter>
                    <parameterName value="@log_date" />
                    <dbType value="DateTime" />
                    <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
                </parameter>
                <parameter>
                    <parameterName value="@thread" />
                    <dbType value="String" />
                    <size value="255" />
                    <layout type="log4net.Layout.PatternLayout" value="%thread" />
                </parameter>
                <parameter>
                    <parameterName value="@log_level" />
                    <dbType value="String" />
                    <size value="50" />
                    <layout type="log4net.Layout.PatternLayout" value="%level" />
                </parameter>
                <parameter>
                    <parameterName value="@logger" />
                    <dbType value="String" />
                    <size value="255" />
                    <layout type="log4net.Layout.PatternLayout" value="%logger" />
                </parameter>
                <parameter>
                    <parameterName value="@message" />
                    <dbType value="String" />
                    <size value="4000" />
                    <layout type="log4net.Layout.PatternLayout" value="%messag2e" />
                </parameter>
            </appender>
            <root>
                <level value="INFO" />
                <appender-ref ref="LogFileAppender" />
                <appender-ref ref="AdoNetAppender" />
                <appender-ref ref="ColoredConsoleAppender" />
            </root>
        </log4net>
    </configuration>
     */
    #endregion TheAppconfig

    5.02.2009

    nice English phrases

    Finding a good cause is incredibly hard and time consuming
    Clear as mud
    When shit hits the fan
    it is easy to make thinks bigger, but harder to make better (Douglas Crockford )

    Time to learn LINQ ?!

    Just download and start to use the linqpad

    5.01.2009

    Best Windows shortcuts ( revised )

    various sources
    This material has been copied from various sources so no offence!
    ALT + TAB
    Move between active applications.
    WINKEY + M
    This will clear your desktop in an instant by minimizing all active applications.
    WINKEY + E =
    Opens explorer windows with the folder sidebar enabled
    WINKEY + D
    This will also clear your desktop, however if you press WINKEY + D once more the applications will reappear.
    WINKEY + L
    This will lock the computer; you will still have to unlock it by pressing CTRL+ALT DELETE.
    WINKEY + F
    This will open the search assistant.
    WINKEY + R
    This will open the RUN command prompt.
    WINKEY + B
    Sets focus on the task bar, you can navigate by using the arrow keys; press ENTER to open one of the applications. You can't really see which icon is selected, but just wait a moment and the application info text will appear. If you press TAB the focus will be set on the desktop.
    ----
    The following shortcuts will work in almost any office application environment; I am especially pleased to use them when I browse the web.
    CTRL + O (CTRL + L)
    This will open the location field. In Internet Explorer you can use this to type in a web address.
    CTRL + N
    This will open a new application window, either an empty window or a clone.
    In Internet Explorer the new window will show the same URL. So it is useful if you want to maintain the old browser window, and not having to leave the keyboard to open another browser window.
    CTRL + TAB
    Use this short cut to move between tab panes, use CTRL + SHIFT + TAB to move in reverse order.
    Some Shortcut Keys you might enjoy
    Windows XP is full of many KEY-Combo Shortcuts to access Feasures quickly. Here are some of the shortcuts you may find most useful.
    WINKEY + PAUSE/BREAK =
    Opens "system propertieS"
    SHIFT + DELETE =
    Delete a file without sending to Recycler first (NO RECOVERY!)
    F5 =
    Refresh (Usefull in Internet Explorer)
    SHIFT F5 =
    Reload Webpage from scratch (NO CACHE)
    CTRL + SHIFT + END =
    Highlight everything down a Text page from current possition (USE HOME for up)
    ALT + CTRL + DEL =
    Ahh, an old favorite. If an App. is being rude, use this to bring the the "Task Manager" (and kill it if you want). There is some other toys here too like, priorities you can set.
    Search "Shortcut keys" under "HELP & SUPPORT" for a complete list of Shortcuts, including these.
    for cmd
    F7 - displays the history of the commands which have been used
    Ctrl + Shift + ESC : Run Task Manager

    Cool programs and tools most of which free ( revised )

    Cool programs most of which free ( revised )

    NUnit and log4net Simple Example Console Application Tutorial

    Prerequisites : you do know something about C# and building console applications

    Download NUnit
    Download log4net

    While installing remember where do you install them, since later on you would have to find the following 2 dlls:
    log4net.dll ( for the using log4net; using log4net.Config; part )
    and nunit.framework.dll ( for the using NUnit.Framework; part of the code )

    Create a new project in VS ( or another IDE in your choice )
    Add the references to the above mentioned dll's

    Copy paste the bellow code. Build your solution.
    Start the Nunit GUI. Create new Nunit project. Navigate to the bin folder of the project copy paste the path of the produced executable ( it contains also the tests in it - than press F5 to verify that all the tests are ran.




    //this is the xml added replace here your log4net and Nunit paths
    //<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
            //  <SpecificVersion>False</SpecificVersion>
            //  <HintPath>..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath>
            //</Reference>
            //<Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using log4net;
    using log4net.Config;
    using NUnit.Framework;
    
    namespace NUnitSimple
    {
        
        class NUnitSubstractor
        {
    
            private static readonly ILog logger =
                     LogManager.GetLogger ( typeof ( NUnitSubstractor ) );
    
    
            public static void Substract ( int intToSusbractFrom , int intToSubstract , ref int intTheResult)
            {
             intTheResult = intToSusbractFrom - intToSubstract ; 
            }
    
    
            static void Main ( string[] args )
            {
                BasicConfigurator.Configure ();
                logger.Info ( " START " );
                logger.Info ( " Hit a key to exit " );
                Console.ReadLine ();
    
            
            } //eof method 
    
    
    
        } //eof class 
    
        [TestFixture]//telling NUnit that this class contains test functions 
    public class TestNUnitSubstractor
    { 
    
         [Test]//telling NUnit that this function should be run during the tests 
        public void TestSubstractOk() 
        { 
                 int intToSusbractFrom = 10 ; 
                 int intToSubstract = 4 ; 
                    int intTheResult = 0 ;
                 NUnitSubstractor.Substract ( intToSusbractFrom , intToSubstract , ref intTheResult ) ;
            Assert.AreEqual (  6 , intTheResult);
        }
    
    
    
             [Test]//telling NUnit that this function should be run during the tests 
             public void TestSubstractNOK ()
             {
                 int intToSusbractFrom = 10;
                 int intToSubstract = 4;
                 int intTheResult = 0;
                 NUnitSubstractor.Substract ( intToSusbractFrom, intToSubstract, ref intTheResult );
                 Assert.AreNotEqual ( 3, intTheResult );
             }
    
    
    } //eof class 
    
    
    } //eof namespace 
    
    
    
    
    #region TheAppConfig
    /*
     <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="log4net"
                     type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
        </configSections>
        <log4net>
            <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
                <param name="File" value="LogTest2.txt" />
                <param name="AppendToFile" value="true" />
                <layout type="log4net.Layout.PatternLayout">
                    <param name="Header" value="[Header] \r\n" />
                    <param name="Footer" value="[Footer] \r\n" />
                    <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
                </layout>
            </appender>
    
            <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
                <mapping>
                    <level value="ERROR" />
                    <foreColor value="White" />
                    <backColor value="Red, HighIntensity" />
                </mapping>
                <layout type="log4net.Layout.PatternLayout">
                    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
                </layout>
            </appender>
    
    
            <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
                <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.2.10.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
                <connectionString value="data source=ysg;initial catalog=DBGA_DEV;integrated security=true;persist security info=True;" />
                <commandText value="INSERT INTO [DBGA_DEV].[ga].[tb_Data_Log] ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />
                
                <parameter>
                    <parameterName value="@log_date" />
                    <dbType value="DateTime" />
                    <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
                </parameter>
                <parameter>
                    <parameterName value="@thread" />
                    <dbType value="String" />
                    <size value="255" />
                    <layout type="log4net.Layout.PatternLayout" value="%thread" />
                </parameter>
                <parameter>
                    <parameterName value="@log_level" />
                    <dbType value="String" />
                    <size value="50" />
                    <layout type="log4net.Layout.PatternLayout" value="%level" />
                </parameter>
                <parameter>
                    <parameterName value="@logger" />
                    <dbType value="String" />
                    <size value="255" />
                    <layout type="log4net.Layout.PatternLayout" value="%logger" />
                </parameter>
                <parameter>
                    <parameterName value="@message" />
                    <dbType value="String" />
                    <size value="4000" />
                    <layout type="log4net.Layout.PatternLayout" value="%messag2e" />
                </parameter>
            </appender>
            <root>
                <level value="INFO" />
                <appender-ref ref="LogFileAppender" />
                <appender-ref ref="AdoNetAppender" />
                <appender-ref ref="ColoredConsoleAppender" />
            </root>
        </log4net>
    </configuration>
     */
    #endregion TheAppconfig

    Blog Archive

    My Blog List

    Video Bar

    Loading...

    About Me

    My Photo
    Yordan Georgiev
    It is one thing to know what to want, second to really want it, third to know how to do it, fourth to be skillful to do it, fifth to actually do it and last but not least to go on without regrets after having done it. LinkedIn Profile
    View my complete profile