Friday 11 November 2011

Hinernate Lazy Load vs Select Statements.

Select statements are very expensive in Hibernate as discussed in my last post on Hibernate Performance. Therefore, the best alternative to avoid selects statements is not to use Lazy loading. Lazy loading does not come without a price, lazy loading is very memory intensive operation and should be used with extensive care.

Wednesday 9 November 2011

Template Method Design Pattern

abstract class Fruit {
  
    // Is the implementation of a template method which will be used in all the subclasses.
    // This pattern is implemented by a Implementation Inheritance.
    public final void eat(){
        System.out.println("I am eating :" + this.getClass().getName());
    }
  
    abstract void cut();
}

class Apple extends Fruit{

    @Override
    void cut() {
        System.out.println("This is how we cut : " + this.getClass().getName());
    }
  
}

class Banana extends Fruit{

    @Override
    void cut() {
        System.out.println("This is how we cut : " + this.getClass().getName());
    }
  
}

public class TemplateMethodPattern {
    public static void main(String args[]){
        Fruit apple = new Apple();
        apple.eat();
        apple.cut();
        Fruit banana = new Banana();
        banana.eat();
        banana.cut();
    }
}

Wednesday 2 November 2011

HQL with Spring JDBC

After doing some more research the following is my suggestion to improve
performance. I am not sure how easily it's possible, if its' really
possible.

I would recommend using "HQL with Spring JDBC".

Spring JDBC basically makes using JDBC easier but still uses JDBC, so we
can get good performance.

HQL helps us write standard queries which mean we can get cross platform
flexibility as well.

What do you think? Is this combination possible?

Hibernate Performance.

After reading a few posts on the internet the following are my
conclusions:

1. Insert or Update operations in Hibernate work fairly good (not as
good as JDBC but close). So we do not need to do any improvement around
those operations other than just doing inserts in batch and avoid
Updates as they are costly anyways.

2. Select operation is very costly in Hibernate as compared JDBC. The
reason is hibernation of Data in objects. We can not avoid selects and
the way we program in hibernate we do a lot of them. The only way around
this problem is caching. We need to attach hibernate with a cache or
enable it if its already present in Hibernate.

3. Another improvement is to use Opportunistic locking by marking our
selects transactions as read-only.

So, basically Hibernate has an overhead and so will spring. Ease of
programming comes with a cost, now the question is how to reduce the
performance cost and keep achieving our Benchmark targets.

Friday 21 October 2011

Comparing date in SQLServer

DATEDIFF(DAY, START_DATE, END_DATE) = 0
AND
DATEDIFF(MONTH, START_DATE, END_DATE) = 0
AND
DATEDIFF(YEAR, START_DATE, END_DATE) = 0

Adding a Date to a date in SQL Server

DATEADD(DAY, No of days to add, date_to_which_days_are_added)




Example:



DATEADD(DAY, 1, START_DATE)

Wednesday 28 September 2011

Intalling Jars in your local Maven repository

Command:


mvn install:install-file -Dfile= -DgroupId= \
    -DartifactId= -Dversion= -Dpackaging=

The above command will install jar file into your local ~/.m2 directory.

Example:

mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.jdbcdriver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar



Tuesday 9 August 2011

Rounding in Java

public static double Round(double Rval, int Rpl) {
double power = Math.pow(10,Rpl);
Rval = Rval * power;
double tmp = new BigDecimal(Rval).setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
return (double)tmp/power;
}

Wednesday 13 July 2011

MD5 checksum on a file in Linux.

Installing MD5SUM package:

$ apt-get update
$ apt-get install coreutils

Generate checksum file
$ md5sum transaction.log > MDSSS

Check the checksum:

$ cat MDSSS
ae43fda27bf612e2d7128c3072220078 transaction.log

Wednesday 6 July 2011

Eclipse Indigo Unstable.

Hi All,

I have tried Eclipse Indigo on Red-Hat Linux 64bit. Its unstable and gives me the following Exception over and over again. Therefore, i would recommend moving back to Helios, which is a stable version and i had no problems with it.

Exception in Indigo:
--------------------

LogFilter.isLoggable threw a non-fatal unchecked exception as follows:
java.lang.NullPointerException
at org.eclipse.core.internal.runtime.Log.isLoggable(Log.java:101)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.safeIsLoggable(ExtendedLogReaderServiceFactory.java:57)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.logPrivileged(ExtendedLogReaderServiceFactory.java:158)
at org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory.log(ExtendedLogReaderServiceFactory.java:146)
at org.eclipse.equinox.log.internal.ExtendedLogServiceFactory.log(ExtendedLogServiceFactory.java:65)
at org.eclipse.equinox.log.internal.ExtendedLogServiceImpl.log(ExtendedLogServiceImpl.java:87)
at org.eclipse.equinox.log.internal.LoggerImpl.log(LoggerImpl.java:54)
at org.eclipse.core.internal.runtime.Log.log(Log.java:60)
at altagracia.services.eclipse.ExceptionHandler.handle(ExceptionHandler.java:17)
at altagracia.plugin.wizards.Connect.getTableFromAttributes(Connect.java:321)
at altagracia.codegen.unifier.ProcedureSpec.statementSpec(ProcedureSpec.java:962)
at altagracia.codegen.unifier.ProcedureSpec.blockSpec(ProcedureSpec.java:750)
at altagracia.codegen.unifier.ProcedureSpec.generate(ProcedureSpec.java:231)
at altagracia.codegen.unifier.ProcedureSpec.generate(ProcedureSpec.java:165)
at altagracia.plugin.popup.actions.ActionProcedureGeneration.run(ActionProcedureGeneration.java:46)
at org.eclipse.ui.actions.ActionDelegate.runWithEvent(ActionDelegate.java:70)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:241)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3586)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3207)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Thursday 30 June 2011

mount windows directory to linux

$cd /mnt
$sudo mkdir windrive
$sudo mount -t cifs _windows_drive_path_ -o username=_user-name_,password=_password_ /mnt/windrive/

To see the contents of vdrive:

$ls -la /mnt/windrive

Monday 16 May 2011

Change author name in eclipse....

1- open eclipse.ini file in the eclipse directory.

2- Abb the following line after -vmargs line

-Duser.name=_Your_name

Monday 9 May 2011

To what extent is Hadoop used in finance? - Quora

To what extent is Hadoop used in finance? - Quora: "To what extent is Hadoop used in finance?"

Almost every large bank I've spoken with has either a pilot project or a production cluster running.

Some example use cases that come to mind:
IT log consolidation and analysis (for use in provisioning, forensics, etc.)
Collection and analysis of enterprise service bus messages
Identifying transaction fraud: creating a large data set for model building and backtesting
Consolidating consumer product data warehouses and transaction logs to build a unified risk score across consumer products (retail banking, home loans, auto loans, student loans, credit cards, etc.)
Daily transformation of loan-level data delivered from a service provider in a custom format into a consolidated format suitable for loading into a database
Collection and analysis of simulation logs from a multi-thousand node compute grid
Tiered time series tick database (recent data stored in an in-memory column store, older data stored on Hadoop)
Check image storage and retrieval
Daily processing of equity markets data for compliance purposes
Creation of a equity market historical data repository for model fitting and back testing

Friday 6 May 2011

Joda-Time - Java date and time API - Home

Joda-Time - Java date and time API - Home

A Nice API to deal with Java Time and Date.

Why minus into minus is plus.

someone asked me why minus into minus is plus. Here is my answer:

1 is mathematically not correct. It should either be -1 or +1. When we write 1 it actually means +1.

1-1 means actually (+1) + (-1)

(-1)*(1-1)
= (-1)*[(+1)+(-1)]
= (-1)*(+1)+(-1)(-1)
= (-1)+(+1)
= -1+1 = 0

This means if (-1)*(-1) is not +1, then we can not prove the above. This is logic.

Now let me explain you the philosophy.

+(-1)

Suppose:
+ = same direction as sign
- = opposite direction sign

+(-1) = same direction to - so answer is -1

-(-1) = oppsite direction to - so the answer is +1

Thursday 28 April 2011

Find Largest table in Oracle DB

select table_name, num_rows from dba_tables where num_rows is NOT NULL order by num_rows desc;

Enjoy :-)

Wednesday 27 April 2011

copy and xcopy command in windows

Copy a file to a folder:
copy /b _source-file_ _destination-folder_

Copy a folder into another folder:
xcopy _source-folder_ _destination-folder_ /D /E /C /R /I /K /Y

Tuesday 19 April 2011

Making Oracle session case insensitive

alter session set nls_comp=ansi;
alter session set nls_sort=binary_ci;

query Next week day oracle, next working day oracle

SET SERVEROUTPUT ON
/
DEFINE V_DATE_TODAY = '23-04-2011';
/
DECLARE
DAY_TODAY VARCHAR2(30);
DAY_NEXT_WORKING_DAY VARCHAR2(30);
DATE_NEXT_WORKING_DAY VARCHAR2(30);
BEGIN
SELECT REPLACE(TO_CHAR(TO_DATE('&V_DATE_TODAY','dd-MM-yyyy'), 'DAY'),' ',NULL) INTO DAY_TODAY FROM DUAL;
SELECT CASE DAY_TODAY
WHEN 'MONDAY' THEN 'TUESDAY'
WHEN 'TUESDAY' THEN 'WEDNESDAY'
WHEN 'WEDNESDAY' THEN 'THURSDAY'
WHEN 'THURSDAY' THEN 'FRIDAY'
WHEN 'FRIDAY' THEN 'MONDAY'
WHEN 'SATURDAY' THEN 'MONDAY'
WHEN 'SUNDAY' THEN 'MONDAY'
END
INTO DAY_NEXT_WORKING_DAY FROM DUAL;

SELECT NEXT_DAY(TO_DATE('&V_DATE_TODAY','dd-MM-yyyy'), DAY_NEXT_WORKING_DAY) INTO DATE_NEXT_WORKING_DAY FROM DUAL;

DBMS_OUTPUT.PUT_LINE('DATE TODAY :' || '&V_DATE_TODAY');
DBMS_OUTPUT.PUT_LINE('DAY TODAY :' || DAY_TODAY);
DBMS_OUTPUT.PUT_LINE('DATE NEXT WEEK DAY :' || DATE_NEXT_WORKING_DAY);
DBMS_OUTPUT.PUT_LINE('DAY NEXT WEEK DAY :' || DAY_NEXT_WORKING_DAY);

END;
/

Tuesday 12 April 2011

Hadoop Hue & django

Hadoop Hue is written in a web-framework build in python called django.http://www.djangoproject.com/

Killing and starting the Hadoop datanode deamon

$sudo jps

check the Datanode process ID

$sudo kill -9

$sudo /etc/init.d/hadoop*datanode start

thats it!

Wednesday 23 March 2011

How to check JBoss Version.

1. Goto: http://_JBOSS SERVER IP_:_JBOSS SERVER PORT_/admin-console

2. Login In.

3. Click on JBossAS Servers -> JBoss AS X (XXX) link.

and this will give you the version.

Friday 18 March 2011

ROLLUP IN ORACLE.

DROP TABLE EMPLOYEE;

CREATE TABLE EMPLOYEE(
COMPANY_ID NUMBER,
DEP_DESIG VARCHAR(20),
SALARY NUMBER
);


INSERT INTO EMPLOYEE VALUES(10,'Developer',80);
INSERT INTO EMPLOYEE VALUES(10,'Manager',100);
INSERT INTO EMPLOYEE VALUES(10,'CEO',150);
INSERT INTO EMPLOYEE VALUES(20,'Developer',100);
INSERT INTO EMPLOYEE VALUES(20,'Manager',500);
INSERT INTO EMPLOYEE VALUES(20,'CEO',600);


SELECT COMPANY_ID, DEP_DESIG, COUNT(*), SUM(SALARY)
FROM EMPLOYEE
GROUP BY rollup(COMPANY_ID,DEP_DESIG) ORDER BY COMPANY_ID;

CUBE IN ORACLE.

DROP TABLE EMPLOYEE;

CREATE TABLE EMPLOYEE(
COMPANY_ID NUMBER,
DEP_DESIG VARCHAR(20),
SALARY NUMBER
);


INSERT INTO EMPLOYEE VALUES(10,'Developer',80);
INSERT INTO EMPLOYEE VALUES(10,'Manager',100);
INSERT INTO EMPLOYEE VALUES(10,'CEO',150);
INSERT INTO EMPLOYEE VALUES(20,'Developer',100);
INSERT INTO EMPLOYEE VALUES(20,'Manager',500);
INSERT INTO EMPLOYEE VALUES(20,'CEO',600);


SELECT COMPANY_ID, DEP_DESIG, COUNT(*), SUM(SALARY)
FROM EMPLOYEE
GROUP BY CUBE(COMPANY_ID,DEP_DESIG) ORDER BY COMPANY_ID;

OUTPUT:
-------

COMPANY_ID DEP_DESIG COUNT(*) SUM(SALARY)
---------------------- -------------------- ---------------------- ----------------------
10 CEO 1 150
10 Developer 1 80
10 Manager 1 100
10 3 330
20 CEO 1 600
20 Developer 1 100
20 Manager 1 500
20 3 1200
CEO 2 750
Developer 2 180
Manager 2 600
6 1530

12 rows selected

MINUS IN ORACLE AND OUTER JOINS IN ORACLE

To see the different try the following:

DROP TABLE FOO;
DROP TABLE BAR;

CREATE TABLE FOO(
FOO_ID NUMBER,
FOO_NAME VARCHAR(20)
);


CREATE TABLE BAR(
BAR_ID NUMBER,
BAR_NAME VARCHAR(20)
);

INSERT INTO FOO VALUES(1,'Fawad');
INSERT INTO FOO VALUES(2,'Nazir');

INSERT INTO BAR VALUES(1,'Fawad');
INSERT INTO BAR VALUES(2,'Nazir');
INSERT INTO BAR VALUES(3,'Hello');
INSERT INTO BAR VALUES(4,'World');

-- Minus
SELECT BAR_ID FROM BAR
MINUS
SELECT FOO_ID FROM FOO

-- Right outer join
SELECT BAR_ID FROM FOO F RIGHT JOIN BAR B ON F.FOO_ID = B.BAR_ID WHERE FOO_ID IS NULL AND FOO_NAME IS NULL

In this case Both of the above queries give same results.

Tuesday 1 March 2011

Day name from date Oracle

SELECT TO_CHAR(to_date('15-09-2010','dd-MM-yyyy'),'DAY') FROM DUAL

Day of the week, Day of the week for previous day in Oracle

select to_char(to_date('15-09-2010','dd-MM-yyyy'),'D') from dual; -- day of week for a date

select to_char(to_date('15-09-2010','dd-MM-yyyy')-1,'D') from dual; -- day of week for a date before

Wednesday 23 February 2011

Stock Exchange Stream Processing Simulator...

In this post i will demostrate how to write the world simplest tick data generator:

This command will write data to a file asx.txt:
-----------------------------------------------
$ while [ 1 ]; do echo $RANDOM >> asx.txt; done;

This command will read asx.txt in almost real-time:
---------------------------------------------------
$tail -f asx.txt -s 0.00001

you can write your strategies on this real-time data. This will just be like data coming from any data providing service/company.

Enjoy :-)

Monday 21 February 2011

Order by + Union All in oracle

In oracle you can not use order by with union all. They dont work together. In this post i will explain you a work around. We will cheat Oracle :-)

--------------------------
Create Table Foo(
Foo_Id Number,
Foo_Name Varchar2(20)
);

Create Table Bar(
Bar_Id Number,
bar_Name Varchar2(20)
);

Insert Into Foo Values(1, 'Fawad');
Insert Into Foo Values(2, 'Nazir');

Insert Into Bar Values(1, 'Mark');
Insert Into bar Values(2, 'Donald');

--Order by and Union All is not allowed together
Select * From Foo Order By Foo_Id desc
Union All
Select * From Bar Order By Bar_Name


--Work around (Cheating SQL :) )
select * from (Select * From Foo Order By Foo_Id desc) a
Union All
select * from (Select * From Bar Order By Bar_Name) b

Enjoy :-)

Round the number and always show decimal places...

The following is the way to round the number and always show two decimal places:

SELECT to_char(round(678,2), '9999999.99') FROM dual;

Friday 18 February 2011

DDL Rollback in Oracle...

Oracle does not support DDL Rollback, Try the following example:

CREATE TABLE FOO(
FOO_ID NUMBER,
FOO_NAME VARCHAR2(30)
);
ALTER TABLE FOO ADD FOO_DESCRIPTION VARCHAR2(50);
INSERT INTO FOO VALUES (1,'FIRST','THE FIRST ROW');
INSERT INTO FOO VALUES (2,'SECOND','THE SECOND ROW');

SELECT * FROM FOO;
ROLLBACK;
SELECT * FROM FOO;

Does rollback statement drops the table created as well? or undo the alter statement?

It only undo the Insert which is a DML, it can not rollbacl DDL statements.

There are two work arounds of this problem:

1. Using Oracle Flachback utility.
Problem with this solution is it has a lot of management overhead and does not work on statement level. This tool can rollback the whole table but can not rollback a simgle alter statement.

2. Database Change Management tools like dbdeploy & mybatis.
This tool can do it all and with quite good flexibility. However, if you already have a database and big tables and we want to drop the tables. In this case we will have to right large insert statements to undo the change.

3. Using both.
Looking at the shortcomings of the above two approaches, i would recommend using this approach.

UNION and UNION ALL in oracle

Difference between union and union all?

1. UNION only selects distinct values and UNION all selects all values.
2. UNION filters duplicates values and UNION ALL does not.

Simple example to test it:

create table foo(
foo_id number,
foo_name varchar2(30)
);

insert into foo values(1,'FAWAD');
insert into foo values(1,'NAZIR');

select * from foo
union
select * from foo;

select * from foo
union all
select * from foo;

Tuesday 15 February 2011

Java Regular Expressions

Ref: http://www.wellho.net/regex/javare.html

Java Regular Expressions - detailed manual


Summary of regular-expression constructs

Construct
Matches Characters
x
The character x
\\
The backslash character
\0n
The character with octal value 0n (0 <= n <= 7)
\0nn
The character with octal value 0nn (0 <= n <= 7)
\0mnn
The character with octal value 0mnn (0 <= m <= 3, 0 <= n <= 7)
\xhh
The character with hexadecimal value 0xhh
\uhhhh
The character with hexadecimal value 0xhhhh
\t
The tab character ('\u0009')
\n
The newline (line feed) character ('\u000A')
\r
The carriage-return character ('\u000D')
\f
The form-feed character ('\u000C')
\a
The alert (bell) character ('\u0007')
\e
The escape character ('\u001B')
\cx
The control character corresponding to x

Character classes
[abc]
a, b, or c (simple class)
[^abc]
Any character except a, b, or c (negation)
[a-zA-Z]
a through z or A through Z, inclusive (range)
[a-d[m-p]]
a through d, or m through p: [a-dm-p] (union)
[a-z&&[def]]
d, e, or f (intersection)
[a-z&&[^bc]]
a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]]
a through z, and not m through p: [a-lq-z](subtraction)

Predefined character classes
.
Any character (may or may not match line terminators)
\d
A digit: [0-9]
\D
A non-digit: [^0-9]
\s
A whitespace character: [ \t\n\x0B\f\r]
\S
A non-whitespace character: [^\s]
\w
A word character: [a-zA-Z_0-9]
\W
A non-word character: [^\w]

POSIX character classes (US-ASCII only)
\p{Lower}
A lower-case alphabetic character: [a-z]
\p{Upper}
An upper-case alphabetic character:[A-Z]
\p{ASCII}
All ASCII:[\x00-\x7F]
\p{Alpha}
An alphabetic character:[\p{Lower}\p{Upper}]
\p{Digit}
A decimal digit: [0-9]
\p{Alnum}
An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Punct}
Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
\p{Graph}
A visible character: [\p{Alnum}\p{Punct}]
\p{Print}
A printable character: [\p{Graph}] or space
\p{Blank}
A space or a tab: [ \t]
\p{Cntrl}
A control character: [\x00-\x1F\x7F]
\p{XDigit}
A hexadecimal digit: [0-9a-fA-F]
\p{Space}
A whitespace character: [ \t\n\x0B\f\r]

Classes for Unicode blocks and categories
\p{InGreek}
A character in the Greek block (simple block)
\p{Lu}
An uppercase letter (simple category)
\p{Sc}
A currency symbol
\P{InGreek}
Any character except one in the Greek block (negation)
[\p{L}&&[^\p{Lu}]]
Any letter except an uppercase letter (subtraction)

Boundary matchers
^
The beginning of a line
$
The end of a line
\b
A word boundary
\B
A non-word boundary
\A
The beginning of the input
\G
The end of the previous match
\Z
The end of the input but for the final terminator, if any
\z
The end of the input

Greedy quantifiers
X?
X, once or not at all
X*
X, zero or more times
X+
X, one or more times
X{n}
X, exactly n times
X{n,}
X, at least n times
X{n,m}
X, at least n but not more than m times

Reluctant quantifiers
X??
X, once or not at all
X*?
X, zero or more times
X+?
X, one or more times
X{n}?
X, exactly n times
X{n,}?
X, at least n times
X{n,m}?
X, at least n but not more than m times

Possessive quantifiers
X?+
X, once or not at all
X*+
X, zero or more times
X++
X, one or more times
X{n}+
X, exactly n times
X{n,}+
X, at least n times
X{n,m}+
X, at least n but not more than m times

Logical operators
XY
X followed by Y
X|Y
Either X or Y
(X)
X, as a capturing group

Back references
\n
Whatever the nth capturing group matched

Quotation
\
Nothing, but quotes the following character
\Q
Nothing, but quotes all characters until \E
\E
Nothing, but ends quoting started by \Q

Special constructs (non-capturing)
(?:X)
X, as a non-capturing group
(?idmsux-idmsux)
Nothing, but turns match flags on - off
(?idmsux-idmsux:X)
X, as a non-capturing group with the given flags on - off
(?=X)
X, via zero-width positive lookahead
(?!X)
X, via zero-width negative lookahead
(?<=X)
X, via zero-width positive lookbehind
(? X, via zero-width negative lookbehind
(?>X)
X, as an independent, non-capturing group



Backslashes, escapes, and quoting

The backslash character ('\') serves to introduce escaped constructs, as
defined in the table above, as well as to quote characters that otherwise
would be interpreted as unescaped constructs. Thus the expression \\ matches a
single backslash and \{ matches a left brace.

It is an error to use a backslash prior to any alphabetic character that
does not denote an escaped construct; these are reserved for future extensions
to the regular-expression language. A backslash may be used prior to a
non-alphabetic character regardless of whether that character is part of
an unescaped construct.

Backslashes within string literals in Java source code are interpreted
as required by the Java Language Specification as either Unicode escapes
or other character escapes. It is therefore necessary to double backslashes in string
literals that represent regular expressions to protect them from interpretation
by the Java bytecode compiler. The string literal "\b", for example, matches
a single backspace character when interpreted as a regular expression, while
"\\b" matches a word boundary. The string literal "\(hello\)" is illegal
and leads to a compile-time error; in order to match the string (hello)
the string literal "\\(hello\\)" must be used.

Character Classes

Character classes may appear within other character classes, and may be
composed by the union operator (implicit) and the intersection operator (&&).
The union operator denotes a class that contains every character that is in at
least one of its operand classes. The intersection operator denotes a
class that contains every character that is in both of its operand classes.

The precedence of character-class operators is as follows, from highest to lowest:

1
Literal escape
\x
2
Grouping
[...]
3
Range
a-z
4
Union
[a-e][i-u]
5
Intersection
[a-z&&[aeiou]]


Note that a different set of metacharacters are in effect inside a character
class than outside a character class. For instance, the regular expression .
loses its special meaning inside a character class, while the expression -
becomes a range forming metacharacter.

Line terminators

A line terminator is a one- or two-character sequence that marks the end
of a line of the input character sequence. The following are recognized
as line terminators:

A newline (line feed) character ('\n'),
A carriage-return character followed immediately by a newline character ("\r\n"),
A standalone carriage-return character ('\r'),
A next-line character ('\u0085'),
A line-separator character ('\u2028'), or
A paragraph-separator character ('\u2029).

If UNIX_LINES mode is activated, then the only line terminators recognized
are newline characters.

The regular expression . matches any character except a line terminator
unless the DOTALL flag is specified.

By default, the regular expressions ^ and $ ignore line terminators and
only match at the beginning and the end, respectively, of the entire input
sequence. If MULTILINE mode is activated then these expressions match just after or
just before, respectively, a line terminator or the end of the input sequence
with the exception that the expression ^ never matches at the end of input,
even if the last character is a newline.

Groups and capturing

Capturing groups are numbered by counting their opening parentheses from
left to right. In the expression ((A)(B(C))), for example, there are four such groups:

1
((A)(B(C)))
2
(A)
3
(B(C))
4
(C)


Group zero always stands for the entire expression.

Capturing groups are so named because, during a match, each subsequence
of the input sequence that matches such a group is saved. The captured
subsequence may be used later in the expression, via a back reference, and may
also be retrieved from the matcher once the match operation is complete.

The captured input associated with a group is always the subsequence that
the group most recently matched. If a group is evaluated a second time
because of quantification then its previously-captured value, if any,
will be retained if the second evaluation fails. Matching the string "aba"
against the expression (a(b)?)+, for example, leaves group two set to "b".
All captured input is discarded at the beginning of each match.
Groups beginning with (? are pure, non-capturing groups that do not capture
text and do not count towards the group total.

Unicode support

This class follows Unicode Technical Report #18: Unicode Regular Expression
Guidelines, implementing its second level of support though with a slightly
different concrete syntax.

Unicode escape sequences such as \u2014 in Java source code are processed
as described in ?3.3 of the Java Language Specification. Such escape sequences
are also implemented directly by the regular-expression parser so that
Unicode escapes can be used in expressions that are read from files or from
the keyboard. Thus the strings "\u2014" and "\\u2014", while not equal,
compile into the same pattern, which matches the character with hexadecimal
value 0x2014.

Unicode blocks and categories are written with the \p and \P constructs
as in Perl. \p{prop} matches if the input has the property prop, while
\P{prop} does not match if the input has that property. Blocks are specified with the
prefix In, as in InMongolian. Categories may be specified with the optional
prefix Is: Both \p{L} and \p{IsL} denote the category of Unicode letters.
Blocks and categories can be used both inside and outside of a character
class.

The supported blocks and categories are those of The Unicode Standard,
Version 3.0. The block names are those defined in Chapter 14 and in the
file Blocks-3.txt of the Unicode Character Database except that the spaces are
removed; "Basic Latin", for example, becomes "BasicLatin". The category
names are those defined in table 4-5 of the Standard (p. 88), both normative
and informative.

Comparison to Perl 5

Perl constructs not supported by this class:

The conditional constructs (?{X}) and (?(condition)X|Y),

The embedded code constructs (?{code}) and (??{code}),

The embedded comment syntax (?#comment), and

The preprocessing operations \l \u, \L, and \U.

Constructs supported by this class but not by Perl:

Possessive quantifiers, which greedily match as much as they can
and do not back off, even when doing so would allow the overall
match to succeed.

Character-class union and intersection as described above.

Notable differences from Perl:

In Perl, \1 through \9 are always interpreted as back references; a
backslash-escaped number greater than 9 is treated as a back reference
if at least that many subexpressions exist, otherwise it is interpreted,
if possible, as an octal escape. In this class octal escapes must
always begin with a zero. In this class, \1 through \9 are always
interpreted as back references, and a larger number is accepted as
a back reference if at least that many subexpressions exist at that
point in the regular expression, otherwise the parser will drop digits
until the number is smaller or equal to the existing number of groups
or it is one digit.

Perl uses the g flag to request a match that resumes where the last
match left off. This functionality is provided implicitly by the
Matcher class: Repeated invocations of the find method will resume
where the last match left off, unless the matcher is reset.

In Perl, embedded flags at the top level of an expression affect
the whole expression. In this class, embedded flags always take
effect at the point at which they appear, whether they are at the
top level or within a group; in the latter case, flags are restored
at the end of the group just as in Perl.

Perl is forgiving about malformed matching constructs, as in the
expression *a, as well as dangling brackets, as in the expression
abc], and treats them as literals. This class also accepts dangling
brackets but is strict about dangling metacharacters like +, ? and *,
and will throw a PatternSyntaxException if it encounters them.

Monday 14 February 2011

Finding and Removing Oracle Jobs...

Find Oracle Jobs:

1. Find running jobs:

SELECT r.sid, r.job, r.this_date, r.this_sec, SUBSTR(what,1,40) what FROM dba_jobs_running r,dba_jobs j WHERE r.job = j.job;

2. Find jobs:
col job format 99999;
SELECT job, next_date, next_sec, failures, broken, SUBSTR(what,1,40) DESCRIPTION FROM all_jobs;

you can use user_jobs, dba_jobs, all_jobs as table option in 2, as required.

Removing a job:

exec sys.dbms_ijob.remove(_job_id_);

Recursively find all files and convert to unix format (excluding those in svn dirs)

Ref : http://snippets.dzone.com/posts/show/108

find . -type f \! -path "*svn*" -exec dos2unix {} \;

After svn checkout you should run this command in your local directory.

Thursday 10 February 2011

isNumber or isNumeric method for Oracle

Oracle does not have these functions, however you can use oracle regular expressions to achive this:

1. Example 1:
SELECT
*
FROM
_TABLE_NAME_
WHERE
REGEXP_LIKE(_COLUMN_NAME_,'^-?[[:digit:],.]*$')

This will return the _COLUMN_NAME_ values that are numeric.

2. Example 2:
select _COLUMN_NAME_,
case when regexp_like(_COLUMN_NAME_, '^-?[[:digit:],.]*$')
then
'Numeric'
else 'Non-Numeric' end as type
from _TABLE_NAME_

3. You can also use it as:
SELECT
*
FROM
_TABLE_NAME_
WHERE
NOT REGEXP_LIKE(_COLUMN_NAME_,'^-?[[:digit:],.]*$')
This will return the _COLUMN_NAME_ values that are non-numeric.

Saturday 5 February 2011

Command line for and while loop.. Shell Linux

Command line while loop:
$while [ 1 ]; do traceroute www.slac.stanford.edu; done;

Command line for loop:
$for x in 1 2 3; do ls -l; done

Enjoy :)

GUI based WinSCP & FTP for MAC.

Try:

Cyberduck
http://cyberduck.ch/

end-of-line character conversion: unix2mac dos2unix mac2unix

All these scripts are one liners:


"mac2unix"
cat $1 | tr '\r' '\n'

"unix2mac"
cat $1 | tr '\n' '\r'

"dos2unix"
cat $1 | tr -d '\r'

NOTE: "tr" (translate character) utility.

Friday 4 February 2011

Tuesday 1 February 2011

Problem running shell script in Cygwin

If you are getting these kind of error in cygwin:

# ./compare.sh
./compare.sh: line 2: $'\r': command not found
./compare.sh: line 5: $'\r': command not found
./compare.sh: line 7: $'\r': command not found
./compare.sh: line 9: $'\r': command not found
' for reading (No such file or directory) `./conf/compare.conf
' for reading (No such file or directory) `./conf/compare.conf
' for reading (No such file or directory) `./conf/compare.conf
' for reading (No such file or directory) `./conf/compare.conf
./compare.sh: line 14: $'\r': command not found

Its because you have to convert this file into a unix format. So use the following command:

# dos2unix compare.sh
compare.sh: done.

This will solve this problem

Monday 31 January 2011

Advanced SED Tutorial. Multiline Sed commands

1. If a line starts with / remove / sign.
$sed 's/^\/ *//g'

2. If a line starts with TABLESPACE remove it.
$sed 's/^TABLESPACE.*//g'

3. If line starts with ) proceeds with none or more spaces replace it with ) and next line.
$sed 's/^) */)\n\//g'

4. Replace ; with ; and next line.
$sed -i 's/;/;\n/g'

5. This command replaces ; \t\n\r or spaces and the / in a file to just \n /.
$sed ':a;N;$!ba;s/[^end];[\n\t\r ]*\//\n\//g'

First of all the filw is all read in come variable N and then we perform operation on it. Its a Multiline function.

6. Line starting with END or end or any of Upper or Lower combination of end, will be ended with a ;
$sed 's/^[eE][nN][dD].*/&;/g'

Monday 24 January 2011

Extrating Table Column Names in CSV format using PL/SQL

This could be useful for writing dynamic code to generate DDL or DML.

1. Create a table Hello_world
create table hello_world(
hello_id integer,
hello_desc varchar2(30)
);

2. Insert some values [this is not important though]
insert into hello_world (hello_id, hello_desc) values (1, 'Fawad');
insert into hello_world (hello_id, hello_desc) values (2, 'NAZIR');

3. Execute the following function:

Input: table name
Output: CSV format of column names

CREATE OR REPLACE FUNCTION INSERT_STATEMENTS(TABLE_NAME_INPUT IN CLOB) RETURN VARCHAR IS
RETURN_VAL CLOB;
BEGIN
SELECT
LISTAGG (COLUMN_NAME, ',') WITHIN GROUP (ORDER BY COLUMN_NAME) INTO RETURN_VAL
FROM
ALL_TAB_COLUMNS
WHERE
TABLE_NAME LIKE TABLE_NAME_INPUT
GROUP BY
TABLE_NAME;
RETURN RETURN_VAL;
END INSERT_STATEMENTS;

4. Call the method:

SET SERVEROUTPUT ON
declare dd CLOB;
begin
SELECT INSERT_STATEMENTS(UPPER('hello_world')) into dd FROM DUAL;
DBMS_OUTPUT.put_line(dd);
end;

Latex on Ubuntu Linux...

I am using the follwing Ubuntu:

$ cat /proc/version
Linux version 2.6.32-24-generic-pae (buildd@palmer) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #42-Ubuntu SMP Fri Aug 20 15:37:22 UTC 2010

Its quite simple to install Latex on Ubuntu:

Just run the following command and let it finish, it might take quite some time.

$sudo apt-get install texlive-full

You are done. Now we need to test it:

Download a simple Latex example from the following link;
http://www.cs.technion.ac.il/~yogi/Courses/CS-Scientific-Writing/examples/simple/simple.htm

Run the following commands:

1. This command will compile the tex document and create a DVI file.
$latex simple.txt

2. To create a PDF out of it:
$pdflatex simple.tex

3. Time to view your pdf file:
$xpdf simple.pdf

Thanks!.

Thursday 20 January 2011

Undefine a variable in Oracle / Undo a variable defination in Oracle

To undefine a user variable named FIRST, enter

UNDEFINE FIRST

To undefine two user variables named FIRST and SECOND, enter


UNDEFINE FIRST SECOND

Monday 17 January 2011

Using Curl to connect to https site to download and Extract a tar file...

Here is the command:

curl -k -u_username_ -O _URL_ | tar -xvf

Example:

curl -k -uhellouser -O https://192.168.2.3:8443/svn/project/V5.0.1.tar.gz | tar -xvf

Using Curl to download and Extract a tar file...

Here is the command:

$curl -k -O _Tar File Path_ | tar -xvf

Example:

$curl -k -O http://192.168.4.189:8443/svn/testproject/releases/V1.0.1.x.tar.gz | tar -xvf

Friday 14 January 2011

Oracle Schema Disk Usage

Login to oracle using sqlplus and user: system

For example:

$sqlplus system/_Password_

Then run this query:

SQL> select sum(s.bytes)/1024/1024/1024 as size_in_gb, s.owner from dba_segments s group by s.owner order by size_in_gb desc;

Thursday 13 January 2011

Schema or User Disk Usage in Oracle

#!/bin/bash

########### USER INPUTS ###########
sys_username="system"
sys_password=""
schema_name_string="" #Input standard name used in all tables.
########### USER INPUTS ###########

filename="username.txt"
SUCCESS=0
FAILURE=1
IMPORT_EXECUTABLE=sqlplus


function init
{
echo "Initialising..."

IMPORT_EXECUTABLE_LOCATION=$( which ${IMPORT_EXECUTABLE} | grep "no ${IMPORT_EXECUTABLE}" )

if [[ -n "${IMPORT_EXECUTABLE_LOCATION}" ]] ; then
echo "Unable to execute import script as the import executable [${IMPORT_EXECUTABLE}] is not on the path"
exit ${FAILURE}
fi

}

function getUserName {

sqlplus -s /nolog << EOF
CONNECT $sys_username/$sys_password
SPOOL $filename
SET LINESIZE 100
SET PAGESIZE 50
select username from all_users where username like '%$schema_name_string%';
SPOOL OFF
exit;
EOF
}

function readUserNamesandCheckDiskUsage {

awk '{ print $0}' $filename | grep -v -E '(^USERNAME|^SQL|^[0-9]|^$|^-)' | (

IFS='
' read -d '' -a arr

for linename in ${arr[@]}
do
echo USERNAME $linename
echo USER "$linename's" DISK USAGE
sqlplus -s $linename/cmms << EOF
Select sum(bytes)/1024/1024 Mb, tablespace_name from user_segments group by tablespace_name;
exit;
EOF
done

)

}

function removeTempFile {
rm $filename
}


init
getUserName
readUserNamesandCheckDiskUsage
removeTempFile

exit ${SUCCESS}

Command to remote login into Oracle DB using sqlplus...

$ sqlplus _username_/_password_@//_servername or ipaddredd_:_port_/_SID_

example:

$ sqlplus system/hello@//10.10.4.15:1521/INSTANCE

Enjoy.

Thursday 6 January 2011

Finding Searching Table name or Column name in Oracle

Try:

select table_name from user_tables where table_name like '%myString%';

select * from all_tab_columns where COLUMN_NAME like '%myString%'

Thanks...

Tuesday 4 January 2011

Opensource Forex Trading...

Open source Linux components (Marketcetra, openFAST, QuickFIX, MySQL etc) used in Forex.

Thanks!

Azure OpenAI Architecture Patterns & Deployment Patterns

Sharing some useful links that will help customers architect Azure OpenAI solution using the best practices: (1) Azure OpenAI Landing Zone r...