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.