Friday, November 18, 2011

Me

Software developer with strong fundamentals in Computer Science and Technology.  Experience in application and systems development in areas of Telecom, Data networking, Cloud computing and Virtualization environments.
Strengths: Good team player.Analysis, Design and Architecture, Networking, Databases and Object Oriented designs.
Expert in Java (J2EE), Python, C++ and Bourne Shell.
Experience in supporting pre-sales and creating edge over competition by interacting with pre-sales teams.
Expertise in agile process, software release and development process planning.Batchelors and Masters in Computer Science from reputed university in India (consistently ranked in top 6  in India).

Assia, Redwood city (2011 April - till date)
Promoted and trained research team in dynamic programming using Python, to facilitate easy algorithm implementation and continued support with all development issues.
Proposed use of Caching to allow scalability by benchmarking and presenting technical analysis of different competing products such as EH Cache, JBoss Cache, OS Cache (for GUI).
Released two different features for customers with zero issues. The process followed was carefully analyze (as it was the first time a feature was released with out issues) and it replaced the existing process.
Enhanced file transfer module which uses Apache ftp client and custom ftp server for better error handling and documented knowledge base with troubleshooting and workarounds  in DMZ environments.
Environment: Java, Maven and Eclipse, Struts/JSF,  JPA, Oracle, PL/SQL, Hudson.

Opsware (HP) (2008 August - March 2011):

Title: Software Design – V1
Product: Opsware, Cloud computing infrastructure management, data center management domain.
Role: As part of framework team, identify and suggest feaures that can simplify architecture, improve customer satisfaction, improve developer productivity. 
Accomplishments:
1.      Developed Virtualization Management software using J2EE.  (EJB, Oracle 11.2 )
2.      Improved AAA features involving RBAC, ACL and Permission Escalation.(EJB, Weblogic)
3.    Initiated and automated deployment by implementing Re-IP process and VM Snapshots.(Python). Recognized by pre-sales team as the best value, and in their words "perception is reality".
4.     Simplified the deployment by automating  and reduced  installer prompts from 28 to 3(Python, Bourne shell). Designed three different out of the box configurations to simplify 80 % of deployment scenarios.
5.      Optimized content uploads, by avoiding duplicate uploads during upgrades and  reduced the upload time from six hours to twenty minutes. (Python, Bourne Shell). Recognized as best feature during that quarter.
6.      Suggested and implemented new ways to manage reference data, using JSON. Automated complex use cases by developing JSON Merge/patch tool. (Java, SQL)
7.   Involved in planning of  release process and component versioning schemes. Helped migration from clearcase to SVN.(SVN, Clearcase, Make, Python). The product is a very complex software of size 8G.
 
Serus Corporation: Oct 2007 – July 2008:
Title: Principal Software Engineer
Actual  Costing and Valuation (Manufacturing):
Costing involves complex calculations involving huge memory requirements and recursive data structures.  Designed an algorithm to find best N combinations from given input costs, without exploding all combinations. Also, implemented JSP pages, loader and caching
Fulfillment: Implemented reports for fulfillment.
Integration using Web Services: As Technical lead Coordinated development activities and implemented web services interface. Used lazy loading of server side domain objects using proxy pattern.  Transormed server side object model to client side model and vice versa.
Used OJB, caching and SQL for data persistence and JSP, Struts framework for front end. Algorithm implementation involved extensive use of Java collections API.  Used Axis 2.1.4 for Web Services

NetAthena (Prediwave Corporation) Fremont CA   Nov 2003 - Oct 2007 (Folded)
Designation: Lead Developer for J2EE
Role:  Worked with CTO, Marketing, developers and QA team. Architected and developed web development infrastructure.
Responsibilities: Brain storming of product requirements, architecting solutions, prototyping, functional specification, system setup and automation of routine tasks such as nightly builds,  automated deployment (using Ant and RC scripts) and development and test environment setups, framework development, implementation, technical leadership, coordinated with QA. Involved in aspects such as security, scalability and response time. Characterized load, nature of web server requests and designed deployment environment for different modules. Secured required interfaces by installing certificates and configuring security and performing load tests.
Virtual Shopping Mall Subscriber Interface:  Implemented static web content  structure for TV viewers to browse products in a Virtual Shopping Mall (VSM) and order the products through set-top box. Designed content generation for VSM using XSLT/struts/EJB.  Secured Order submissions from TV are using HTTPS.
Virtual Shopping Mall Product Interface:  Provides a web based interface for uploading products and categories of products for sellers. Used Struts for front-end, EJB and Oracle 9i for persistence.
Billing and Presentation Module: Architected a Billing Server node that extracts, processes and transforms  bills to PDF, HTML formats. Bills are archived and also packaged for delivery to the Set-Top Box.   Used XSLT, FOP, JSF, Spring, Hibernate environment. Provided a web interface to configure, schedule and view billing tasks  and subscriber bills using EJB Timers and JSF.
CAS and Pay Per View: Designed Conditional Access System used for scrambling unauthorized TV Channels for subscribers. Developed the system by researching the specification papers submitted. Designed a TCP/IP based protocol to broadcast entitlements. Designed and implemented Pay-Per-View module.
Integration with legacy systems: Was involved in the design of integration of the product database with legacy proprietary Subscriber database and Inventory System (MAS 200):  Integrated Crystal Enterprise Server(CES) with Web based Subscriber Management System: Involves understanding of URL’s for CES reports, customizing CES to call database stored procedures and to fetch cached reports from CES. Integrated with  Oracle Financials Order Management: Imported VSM Orders to  Oracle Financials 11i Orders management and VSM Subscribers to Customers tables.

Environment: JBOSS, Eclipse, Ant, SUSE 9.x Linux, Struts, EJB 2.1, VC++, Oracle 9i, JUnit.                


Project: NextFire (VXML based services platform)  Aug 2001 - Dec 2002
Description: Mobile services development platform using a voice browser based VoiceXML interpreter. A J2EE based application involving multiple, redundant, application server hosts, database hosts, telephony clients (VoiceXML interpreters), and Signaling nodes.
Role: Responsible for architecting, implementing network management architecture for remote monitoring, configuration, performance management and fault. Involved in implementation of contact management service implementation. Involved through all phases of product development: concept definition, requirements, functional specification, design, implementation and phased handoff to QA team.
Environment:  Weblogic, JBoss,  JMS, JMX, JDBC , Java 1.4.1, J2EE,  Oracle 9i , C++, STL, TCP Sockets, Xerces XML, X.733, VoiceXML, , NetBeans, Perforce, ANT, , RedHat Linux 7.x, Sun Solaris 9, Windows..

Softquest Technologies Inc  ( March99 – Aug ‘’01, Feb ‘03 – July ’03)
client: Verizon GTE, Waltham MA  April2003 - July2003
Designation: Senior Software Engineer
VZShare (File Sharing among DSL subscribers)  Jan 2003-June 2003
VZShare uses P2P programming paradigm and JXTA as the platform for file sharing among DSL subscribers. Worked with Sun’s R&D team, to use JXTA in Verizon DSL. Developed utilities to monitor JXTA platform protocol elements such as rendezvous and relays.Implemented HTML, CGI-bin/Perl routines to view the reports on the platform traffic and health of different P2P network elements.  
·          Environment: JXTA 2.0, HTML, Apache, JBuilder 8, Eclipse, NetBeans, JDK 1.4, ANT, Perl, CGI-bin, MKPKG, Windows NT/2000 and SunOS 5.9

Client: Lantern Communications, San Jose, CA  July 2001 - Aug 2001

Project: Integration of Element Management Interface with OSS applications

Description:    The application is a RPR (Resilient Packet Ring) IEEE 817.2 protocol implementation used in broadband applications.
Role:  As consultant, implemented a module to test TMF-590 complicance of the CORBA IDLs.
Environment:  Java, JFC, Silver Creek, RPR, TCL, SNMP and Unix.

Client: CISCO Systems, RTP, NC      Jan 2001 – June 2001
Project: Provisioning of SS7-PRI Gateway
Description:   As consultant, developed a new Cisco proprietary application tool using Java 1.2 (JFC and Swing) for TLI based Provisioning of components in Cisco’s Softswitch based SS7-PRI Gateway. Configuration is deployed for elements that have Cisco IOS and TL-1 interfaces.
Environment: Java, JSP, JDBC, JFC 1.2/Swing, Socket APIs, Jbuilder 4.0, DDTS, ClearCase, VoIP, SNMP, SS7, TL-1, Cisco IOS and Sun Solaris 2.6.

Client: Lucent Technologies-Bell Labs, Columbus, OH  Sept 1999– Jan 2001
Project: Provision of N/W Elements in the 7R/E project
Description: As consultant, implemented Web based EMS to manage VoIP Network elements with a uniform interface. The application comprises concurrent distributed CORBA Servers to persist and distribute configuration data and configuration changes to network elements. Solved critical unresolved problems in the current product and developed considerable expertise to help the product architecture team, and worked with them closely during subsequent release.
·         Designed and implemented CORBA IDL’s for provisioning different network elements. Implemented in C++ using RougeWave libraries and designed database schema for object persistence. Involved in designing and implementing framework for persisting the provisioned details in Versant OODB and distributing the provisioned details to the network entities in a transaction-oriented approach.
·         Designed and developed provisioning screens in JSP, HTML, JavaScript, using JDK1.2 and ServletExec Web Server.
Environment: Java, JSP, JavaScript, ServletExec, C++, RW Libraries, CORBA Orbix, Versant OODB,  Expect Scripts, UML, Sablime, ATM, VoIP, SS7, SNMP, Solaris, Alcatel Omnistack 5024(Layer 2/3 Switching), Packet Star Voice Gateway, Common Gateway and EXCEL Switch.
             
Project: Database Component for IVR applications   March 1999 – Sept  1999
Description:  Designed database schema and developed database module using (ATL) COM and ADO 1.5 in Windows NT environment and using Visual C++ 6.2. Analyzed various SAPI and TAPI and Speech Recognition engines. 
Environment: Visual C++, ATL COM, ADO 1.5, SpeechWorks 6.x, MS Access and Windows NT 

Hewlett Packard, Bangalore, India   July 1997 – Feb 1999
Role: Senior Software Engineer (Consulting)
Customer Service Request Module (CSR):
Designed and developed client for Customer Service Request Module (CSR). JNI for interacting with C++ on the server side. Implemented synchronization routines for allowing different CNAM instances in a single process (multi-threading) for accessing global data.
Developed a module to merge and translate Call Records apart from consolidating (merging) records.
Description: Network Element Controller: CMT Framework developed over Open View DM platform subscribes for alarms received in the FMP server. The framework clears alarms by interacting with network elements. Extended GDMO MIBS and utilized MOT and OpenView Tools (Ovatgen). Implemented MML interface using Expect Scripts for logging into switch and clearing alarms (actions). Used RogueWave libraries for most of the utility classes. Implemented simulators and automated test suites.Utilized TMN Fundamentals and OSI Management principles during project. Involved in acceptance and validation at customer site(SingTel) Environment: C++, DE, RogueWave, OpenView, GDMO Toolkit, X.733, Korn Shell scripts, MOT NEC (Network Element Controller), Oracle 7.x and HP-UX

Wipro-GE Medical Systems, Bangalore, India             Jun 1996-June 1997                                         
Description:  Involved in porting GE’s PET (Positron Emission Tomography) application from HP-US9.x to Sun Solaris 2.4 and non-standard C++ to standard C++.


Friday, November 04, 2011

File Transfer Protocol:

FTP is an application protocol used to transfer files, and is based on TELNET protocol. It is a text based protocol, where the commands are sent in clear text.
FTP has two parts: ftp client and ftp server. FTP Server in general listens on standard port 21 and FTP client initiates the connection to the server.
There are two different tcp connections between Ftp Client and Ftp Server. The first connection established serves as the control channel, so is also be used to send out-of-band data (commands).
After initial login and password, client can choose the mode of data transfer, which can be any of EBCIDIC, ASCII or binary. By default it is ASCII, and is generally overidden by specifying 'bi'.
In binary/streaming mode, any number of files can be sent in a transaction, and client/server does not include End-Of-Record/End-Of-File characters at the end of the stream. So, it is harder to know when a transfer is complete.
In such cases, the party that reads data sends positive response when it reaches end of stream on read.

There are two different data transfer commands: RETR (get), STOR (put). Client sends HELP command to see whether the printed list from the server contains GZIP option. That serves as an indication that client can transfer compressed files.

By default, client sends a port number using PORT command to the server, letting the server know that it will start listening on that port.
On receiving PORT command, the server establishes data connection to the client on that port. That is, control connection is from client to the server and data connection is from server to the client. This default mode is also called Active mode.
The problem with Active mode of FTP is that when the client lies behind a firewall, server cannot connect back to the client. To overcome this situation, ftp also supports passive mode, where data connection is also initiated by client to the server.To let server know that it wants to use passive mode,
instead of using regular PORT command, ftp will send PASSIV command to the server. Then server will open a socket and sends the socket-id back to the client. Client will use servers ip and port to establish a TCP data connection to the server.

FTP works mostly fine in simple unsecured environment. Things get complicated in the environment of VPN tunnels (Encryption), Multi-homed network interfaces, NAT, firewalls and proxies.
It becomes harder to diagnose what went wrong in such situations, as there are many several ways things could go wrong. The following are some of the ways:

The problem with combination of VPN + Proxies/NAT is that proxy cannot intercept the fields in the packet as they are encrypted and hence cannot transform the IP address in the packet headers.

In case of multi-homed network interfaces, the problem arises when the party(server in Active mode, client in the passive mode) responsible for data transfer does not use its DNS resolved IP Address/interface for out going packets.
This situation is not very uncommon, as administrators configure it for load balancing purposes.

The problem with firewalls is that depending on the way firewalls are configured, routers can allow some ports and disallow certain port ranges, causing unpredictable behavior. This situation is harder to diagnose or prevent as there is no easy way
to know which ports are open and which are not for a particular host, with out help from the network administrator. Typically hackers use nmap or open ftp ports, but administrators work constantly to block such threats and thus it is harder without the help from the administrator to know which ports can be used.
Best solution in this scenario, is knowing which ports need to be opened and coordinating with network administrator to open those ports.

Even in a unsecured environment, the server or client could get into trouble as it could run out of disk space or waiting for the file locks etc... In such situations ftp will time out after waiting for the data transfer time out interval.
For large transfer or with dealyed transfers, tcp connection of the control channel could be terminiated by the intermediate routers.

Alternatives to FTP: SFTP & SCP. SFTP is similar to FTP but works on secure connection such as TLS sockets or ssh connections. It differs from SCP, as it provides options to query and manage remote and local directories.
wget and curl : They are good, but they cannot support put functionality.

Thursday, July 15, 2010

Functional Programming Terminologies:

1. Lambda:
Lambas help defining anonymous functions.
a = lamba x:x+3.
Here 'a' is a function variable. More importantly lamba is useful as anonymous function in Maps.

2. Map/Zip:
a) x = [ 1, 2, 3, 4, 5]
y = map (a,x) or map (lambda a : a + 3, x )
=> y = [ 4, 5, 6, 7, 8]

z = map (a, x, y) // map gives longest list length as the final/result list length
=> z = [ (4, 7), (5, 8), (6, 9) , (7, 10), (8, 11) ]
b = [ 1, 2]
z = map (a, x, b)
=> z = [ (4, 4), (5,5), (6, None), (7,None), (8,None)]
z = zip(a,x,b) // zip gives shortest list length as the final/result list length
=> z = [ (4,4) (5,5)]

3. Reduce
c = reduce(lamba x,y : x + y, a)
=> c = (((4 + 5) + 6) + 7) +8
=> c= 30

4. Filter:
c= filter (lambda x : x < 7, a)
=> c = [4, 5, 6]

5. List Comprehension:
Some of the above can also be done through list comprehension
c = [ i for i in a if i < 7 ]
c = [ 3 * i for i in a ]

Wednesday, April 08, 2009

lsof on solaris:

download lsof from sunfreeware.com

install package lsof

access it as /usr/local/bin/lsof

Monitoring on Solaris

iostat -xn 20

netstat -arn

vmstat

Disk usage

du | sort -r -n

df -kh

quot /etc

NFS

/etc/dfs/dfstab

shareall, unshareall, svcadm, chkconfig

Hostnames

/etc/inet/hosts

/etc/inet/ipnodes -> introduced initially for ipv6

/etc/hosts -> exists for bsd compatibility, actually its a link to /etc/inet/hosts

VI

create .exrc in $HOME with entries set ts=4, set nu, set autoindent

use :set list to show tabs and spaces in the file. Useful to check the mix of tabs and spaces

By default vi uses one buffer (unnamed buffer). If needed use "a "b ... as named buffers.

eg: "add "b10yy "c20dd "ap "bp "cp

Monday, October 01, 2007

Factory and Abstract Factory:

In factory we have to provide a FactoryClass that can construct different products. The product type that needs to be constructed is usually specified in the argument for the factory method, or a different method for each product can be specified pushing the responsibility onto the client modules to invoke the right product.

Suppose we have three products A,B and C. And lets have a factory class F. F can have either createProduct(argument) or createA(); createB(); createC() implementations.

One disadvantage with this approach is that it does not allow for extensibility. Every time we need to add a new product code we end up changing the code in Factory class. Lets say if there is new product D, then we’ll have to add a new method createD() or change the code for createProduct(). But, if we can have a class called product (assuming all A,B,C and D are of same type) and if we can classify A,B,C and D as Product, then by having a separate factory class for A, B or C will allow in future to just add any new factory class for a new product with out touching the existing code. So, it will be A, B, C, D, E…..

Allowing clients to specify their concrete factory class, allows to add new client code that uses new ProductFactory with minimal effort. For this to work we generally declare earlier ProductFactory as an Abstract class, as it really does not create any classes, and all Afactory, Bfactory…. As concrete factories.
Each concrete factory creates its product type and abstract factory refers to abstract product. I guess there is no need to say that this is AbstractFactory.

Tuesday, September 25, 2007

Sruts 2 for dummies
Sruts 2 for dummies

Requests:

Struts 2 uses OpenSymphony's WebWorks and XWorks frameworks. XWorks frameworks implements IOC (Inversion Of Control) framework, thus decoupling
command receivers from originators. Its an extension to the Command Pattern from Struts 1.x to additionally allow the Action objects to be independent of
the HTTPServletRequest/Response. It all looks rather complex initially but it is very trivial... Just following two tips would help.

1) When using command pattern instead of receivers requiring to implement interface with execute(param1, param2, ....), let them
implement just execute() without any arguments. Now send these arguments to the receiver via hashmap. in global visibility.

Receiver if interested in request parameters can request them using singleton object ActionContext.

2) Now if ActionContext is a singleton, how to chain ActionContext. For this the framework, uses concept similar to Stack.
Every ActionProxy (not exactly Action, to remove burden from us) saves its ActionContext (or caches locally) in a local variable before calling a next Action. At the end of the Action,
it restores its ActionContext. This is not tough, just ...

Save ActionContext;
try {
ActionInvocation.Action...
} catch () {}
Finally
{
restore ActionContext;
}


Two direct advantages of this IOC approach are:

1) Filters as per Aspect Oriented Programming (AOP) need not require to implement the delegation model where they dispatch the request using chain pattern.
Similary while receiving response.

2) Unit testing of the actions is simplified as they are independent of container related parameters.


Return Values from Actions.

Earlier in Struts 1.x all actions used to explicitly add results to request,session ( for pull model of Model 2 Architecture ) to allow view to access the return values or access to the model objects
But if there is no direct access to HTTPRequest for Action objects, how can they access them. Well they can still get them using the ActionContext right. Struts 2 also uses OGNL notation to allow to retrieve
responses or model objects using stack. As Actions are being executed in a chain pattern (like I said earlier the stack model), the responses will also be available in the stack model. The last action in the ActionChain
will save the objects at the bottom of the stack (or at the top ?). OGNL allows objects to be retrieved using a notation convenient to use in templates/views. such as top, indexed notation etc.