text:
Telecommunications service providers are increasingly relying on third party applications developed in accordance with industry standard application programming interfaces (API's). In order to decouple the connection between the standard API's and the telecommunications network, the present invention creates a translation layer or open services gateway (OSG). The open services gateway enables an application written to conform to an industry standard API to be used despite changes in the underlying network. The OSG encapsulates the commands from the API's in a TCP/IP packet which is formatted in accordance with a generic data interface specification for an intelligent network services control point. In this manner there is no hard-coded coupling between open standard API's and the telecommunications network. Additionally, the intelligent network services control point can perform important interference monitoring functions.
1. A method for providing telecommunications services to a user of a telecommunications netwotk connected to an intelligent network services control point based on one or more applications written in accordance with one or more standard application programming interface (API) comprising the steps of:
detectinir at the intelligent network services control point that the call must be processed by a standard services application;
sending a message from the Intelligent network services control point to the open services gateway;
informing the standard services application from the open services gateway of a call event to be processed by the standard services application;
receiving at an open services gateway a command from the standard application responsive to the call event with said command formatted in accordance with the standard application programming interface;
formatting the command at the open services gateway module into a command format acceptable to the intelligent network services control point; and,
forwarding the formatted command to the intelligent network services control point.
2. The method of
receiving the formatted command at the intelligent network services control point;
implementing the command in the telecommunications network;
receiving a response from the telecommunications network responsive to said command;
sending the response from the intelligent network services control point to the open services gateway;
formatting the response at the open service gateway into a format in accordance with the standard application programming interface; and,
forwarding the response to user through the standard application programming interface.
3. The method of
generating a tagged-value TCP/IP message encapsulating the command.
4. The method of
5. The method of
6. The method of
7. The method of
8. The method of
9. The method of
10. The method of
11. The method of
12. The method of
13. A method of providing an open services gateway for handling a call from a subscriber in a telecommunications network connected to an intelligent network services control point in which the call is processed by an external application accessed through a standard application programming interface (API) comprising the steps of:
detecting at the intelligent network services control point that the call must be processed by the external application;
sending a TCP/IP call notification message from the intelligent network services control point to the open services gateway;
informing the external application from the open services gateway of a call event to be processed by the external application;
acknowledging the call notification by sending a response message from the open services gateway to the intelligent network services control point;
executing the service for the subscriber at the external application and instructing the open services gateway to connect the call;
sending a TCP/IP message containing the call routing instructions from the open services gateway to the intelligent network services control point;
sending a connect message to the telecommunications network from the intelligent network services control point sends to connect the call; and,
acknowledging the receipt of the connect request at the intelligent network services control point.
14. An open services gateway system for communicating commands in real time for providing telecommunications services to a user of a telecommunications network between an intelligent network services control point and external applications written in accordance with a standard application programming interface (API) comprising:
an arbitration module for formatting commands received from the intclligent network services control point through a tagged-value TCP/IP message into a command format in accordance with the standard API of one or more external applications.
15. The system of
16. The system of
17. The system of
18. The system of
19. The system of
20. The system of
21. The system of
22. The system of
This invention is related to a method and system for providing a gateway between third party applications and the underlying functionality of a telecommunications network by providing server objects that implement the interfaces defined in the open standard application programming interfaces (API's). More specifically, the method and system provides a way to implement standard API's in a telecommunications network using an existing intelligent network service control point.
In the current telecommunications environment many standards organizations such as 3GPP, 3GPP2, Parlay and Sun Microsystems' Jain� technology initiative have been busy developing various open standards-based services architectures and API's in order to permit more efficient development and integration of new and innovative telecommunications applications. For example, the Media Gateway Control Protocol (MGCP) controls (trunking) gateways that interconnect the Public Switched Telephone Network (PSTN) with packet networks and for controlling (residential) gateways that function as network interfaces for customer premise located equipment (e.g., phones with an RJ-11 jack). Thus, service creators are interested in developing services based on the standard open API's.
Currently, gateways between third party applications and the underlying telecommunications network use either hard-coded API to Network Protocol mappings or have been implemented directly on top of the Network Elements themselves.
It would be desirable to have a system and method that could implement standard API's without having to specifically code the mapping to the underlying Network Protocols.
Further it would be desirable to have a system and method to implement standard API's without having to implement them directly on top of the Network Elements themselves.
It is desirable to have a means to implement standard API's that are decoupled from the underlying signaling network.
In accordance with the present invention an open services gateway method and system translate standard API's into an object-oriented format that can be used to control the underlying network functionality. The present invention provides a novel method for providing server objects that implement the interfaces defined in the standards.
In the method of the present invention the open services gateway server object invokes service logic running on the intelligent network services control point� intelligent network service control point created using the SPACE� graphical programming environment. Service invocation is accomplished via a tag-value based Transmission Control Protocol/Internet Protocol (TCP/IP) message, the Invoke App message defined in SR-5202, ISCP Generic Data Interface Specification for TCP/IP which document is herein incorporated by reference. The intelligent network services control point service logic, in turn, communicates with the other network elements such as the MSC, HLR, SGSN, GGSN using standard telecommunications protocols such as INAP, CAP and MAP to request services from the network such as call connect. The generic data interface (GDI) tag/value commends are mapped to CAP or MAP messages and the call model is enforced on the ISCP. Conversely, the network elements can notify the intelligent network services control point of specific events such as phone-off-hook, call terminated or request services of the intelligent network services control point such as routing number translation or subscriber authentication.
The service applications use the standard APIs to communicate with the intelligent network services control point through the open services gateway using tag-value based messages over a TCP/IP connection. The intelligent network services control point service logic then interprets and translates these tag-value pairs into signaling network protocol messages. The process is the reverse for messages originating in the signaling network. Messages arrive at the intelligent network services control point where they are interpreted and translated by the service logic into tag-value pairs that are sent back to the open services gateway via a TCP/IP connection. The open services gateway then translates the tag-value pairs into a format that is in accordance with the standard API of the application.
This approach has at least three distinct advantages. First heterogeneous networks and network protocols can easily be supported with the same gateway. Because the gateway is decoupled from the network protocols via the intelligent network services control point service logic, the same gateway can simultaneously support fixed, mobile, and even packet-based network signaling protocols such as INAP, AIN, CAP, WIN, SIP/MGCP. Second, modifications necessary to support individual network idiosyncrasies such as proprietary extensions to standard protocols, or even entirely new protocols require only service logic modification to the intelligent network services control point and does not require changes to the source code of the gateway provided, of course, that these protocols or extensions are supported by the intelligent network services control point. Service logic changes may be implemented using the Telcordia� SPACE� service creation and provisioning sytstem. Finally, by delegating the network signaling aspects to the intelligent network services control point provides the possibility to manage potential feature interactions between the applications that utilize the API's and the Intelligent Network services already deployed in the network such as prepaid services or virtual private networks (VPN's).
The present method and system provides a mechanism that permits rapid development of new standard API's and API extensions and of new API to network signaling protocol mappings.
The open services gateway 100 has two sets of capabilities. Open services architecture (OSA) 110 is the architecture defined by the 3GPP standards organization. The OSA API is written in Common Object Request Broker Architecture (CORBA). The intelligent network services control point Service Access (ISA) 120 is the other possible translation capability of the OSG. The ISA API expands the OSA with additional functionality provided by the intelligent network services control point 200 allowing third party service providers to define features that are not currently part of the OSA set of features. The ISA API provides a natural mapping from the CORBA IDL world to a tag-value based TCP/IP message and vice-versa. The ISA API's are implemented either in the CORBA language or the JAVA language.
OSG translates the OSA APIs to intelligent network services control point specific APIs and functions as the middle tier entity between service applications and intelligent network services control point Customized Application for Mobile Network Enhanced Logic (CAMEL) capability features. It also supports intelligent network services control point access at a different layer (outside the scope of OSA), which is referred to as intelligent network services control point (ISCP) Service Access (ISA) 120.
In a preferred embodiment, the interface to intelligent network services control point 200 is the InvokeApp command of the Generic Data Interface (GDI) 150 specified in Telcordia Special Report SR-5202 dated October 2001 and incorporated by reference. Because the open services gateway 100 maps standard open APIs to Telcordia specific intelligent network services control point capabilities, GDI 150 is an important interface. Consequently, it is important to integrate the GDI 150 with the rest of the OSG modules that comprise the functionality of OSG 100 as well as to understand options to the GDI 150. CORBA could also be used to implement the interface between the OSG 100 and intelligent network services control point 200 in a future release.
As depicted by
The OSG Platform Manager (OPM) 130 is the key interface that is responsible for managing the lifetimes and interaction of all other OSG components. When OSG starts up, OPG Platform Manager 130 gets created. OPM 130 loads the deployment descriptions and controls the creation and initialization of other components. When all the required systems are initialized, OPM 130 registers the available services with the Framework and announces the availability of the system by publishing the Initial Reference of OSG that a client can use. In the preferred embodiment there would be a registration with the Naming service for publishing.
OSG application logs are managed by a set of interfaces. OSG Log Controller (OLC) 131 is the interface that manages all these log related interfaces. When other OSG components require access to an application log interface, they obtain a log handle from the OSG Log Controller 131. Application components of OSG could choose to raise an alarm to flag the occurrence of abnormal/unexpected behavior of any system element. In such cases, the application components obtain an alarm handle from the OSG Alarm Controller (OAC) 132 to raise an alarm.
The OSG Data Repository (DR) 141 is an infrastructure service available to application components of OSG to store, update, retrieve and delete application data. DR 141 abstracts the details of how and where the data might be actually kept/persisted or accessed and presents a call level interface to application components. The OSG Data Repository Controller (ODRC) 133 is the managing interface for these repository roles. Any application component that is interested in repository access obtains a suitable handle from DR. The handle requested and given out could be application component specific.
The OSG InvokeApp Controller (OIC) 134 controls the communications between the OSG 100 and the intelligent network services control point 200 using the Generic Data Interface (GDI) 150. GDI 150 provides intelligent network services control point 200 with the capability to send/receive transactions to/from external systems over TCP/IP using TCAP messages. GDI supports a limited number of message types defined as part of the specifications. InvokeApp Service (IAS) abstracts a lot of protocol communication and encoding/decoding details and presents a higher layer Java API to application components, using which they could send/receive InvokeApp messages to/from intelligent network services control point. InvokeApp messages can be created using InvokeAppMessageFactory interface. OSG InvokeApp Controller 134 is the managing interface that controls IAS, InvokeAppMessageFactory and the rest of the interfaces and classes co-operating to realize the GDI InvokeApp functionality. OIC also controls the configuration details relevant to any GDI link.
In a way, the entire OSG 100 can be thought of as something that bridges the differences between two different views/representations of data and operations to achieve the same purpose. This role can be described by terms such as �translator�, �bridge� or �protocol converter.� The applicants prefer to use the term �arbitrator� to denote the role of the OSG 100 in the providing of network services. OSG's arbitration roles have been abstracted and managed by the OSG Arbitration Controller (OAC) 135. OAC 135 creates and distributes arbitrator interface implementations, core OSA components obtains a relevant arbitrator interface handle from OAC and use that handle to communicate with far end systems such as the intelligent network services control point.
The OSA Framework Controller (OFC) 140 is the interface that manages all the components that are associated with the Framework module of OSA specifications. OSG implements selected Framework interfaces from OSA specification as necessary to support selected functional implementations. OFC 140 would control the configurations and interrelationships of these implementations. OSG Platform Manager (OPM) 130 relies on OFC 140 to manage all the aspects that are associated with OSA framework module.
The OSA CallControl Controller (OCCC) 139 is the interface that manages the various interfaces and classes that together implement the Call Control module of OSA specifications in OSG. This interface is OSG specified, and not OSA specified.
The OSA User Interaction Controller (OUIC) 138 is the interface that manages the various interfaces and classes that together implement the User Interaction module of OSA specifications in OSG. This interface is OSG specified, and not OSA specified.
The OSA User Location Controller (OULC) 137 is the interface that manages the various interfaces and classes that together implement the User Location module of OSA specifications in OSG. This interface is OSG specified, and not OSA specified.
The OSA User Status Controller (OUSC) 136 interface that manages the various interfaces and classes that together implement the User Status module of OSA specifications in OSG. This interface is OSG specified, and not OSA specified.
OSG 100 is more of a capability to expose network element functionalities than merely a way to marshal a limited number of APIs to the intelligent network services control point 200. The design of the OSG 100 benefits from a component-based architecture. Essentially, components are units that are abstracted by interfaces and can be assembled together to build specific solutions and services. Components can be deployed using different platforms according to implementation constraints and business needs. Component implementations may be replaced, providing the component specification remains the same. Component-based frameworks not only support the cooperation of components across computer and network boundaries, they also enable the independent evolution of the components. In a nontrivial application, components do require a support infrastructure so that the component building can focus on the business core rather than implementing the infrastructure services. Also, the co-ordination of different components in an assembled application is important. Containers typically provide such infrastructure to components. Different kinds of containers address the different categories of components and optimize the parameters based on the category specific variants. The OSG system may be deployed either in an IT environment which may be geographically remote from its peer intelligent network services control point installation or locally within its peer intelligent network services control point system. It is preferred that the OSG reside on the same switched LAN or enclave as its peer intelligent network services control point installation. It is desirable to minimize the number of router hops for performance considerations.
While Application Servers play the role of such container systems for certain categories of component based Java� software, they do impose restrictions on the component models that can be supported. Presently, the application servers offer most sophisticated support for Java components conforming to Enterprise JavaBeans (EJB) Model. In the preferred embodiment the OSG 100 is to talk to intelligent network services control point 200 using GDI 150 �InvokeApp� which is a proprietary protocol from Telcordia, and hence, there has to be a means to bridge application server hosted components like EJBs and InvokeApp. While Java Connector Architecture addresses this issue in general, the support for JCA is still in its infancy. In the preferred embodiment, in the absence of a suitable and viable container that is commercially available, OSG 100 uses the OSG Platform Manager 130 as its container.
The preferred implementation of the OSG is as a Java system, with most of the components being written using only the Java programming language. This dramatically reduces the cost of porting to another operating system. In line with this driving requirement, the supporting build system shall also be OS independent. Of course, one skilled in the art would appreciate that other languages such as C, or C++ could also be used.
The user applications look at OSG as a CORBA server implementation of certain 3GPP specifications. User applications implement the client part of the specifications. The OSA core objects in OSG implement the IDL defined in the 3GPP specifications. The lifecycle of these objects will be managed by an ORB. In the preferred embodiment, Borland's VisiBroker for Java ORB is used. All ORB API access shall be through the org.omg.CORBA classes and interfaces as defined in the Java 2 API. The org.omg.CORBA.ORB class allows a plugable implementation, which means that one can install any Java ORB without changing code.
Some of the services hosted by the OSA 100 require that state data per client request be maintained. An example of such a service is the Generic Call Control service, amongst others. It is envisaged that an OSA client application may register for notification of activity of a certain subscriber and may be interested in such notifications for significant periods of time, in months or for the entire time that the subscriber is registered with that application. Thus this notification data must be persistent and relevant across multiple system failures, hardware changes etc. A reliable data store is essential.
The relational database that shall be the persistence repository for the OSA in the preferred embodiment of the invention is Oracle's Standard 8i database. The Data Repository Controller 133 would employ JDBC compliant database connection drivers to integrate the OSG framework and the database. DR 141 can choose to maintain a cache for performance objectives as long as it supports transactional ACID (Atomicity, Consistency, Isolation, Durability) behavior. DR 141 would be able to hold up to 100,000 event registrations and 1,200 active interfaces and can be restored from a backup in the event of a system failure.
The OSG 100 will have a certain number of configuration parameters. These range from the deployment descriptors of the OSG application components, to properties such as the size of certain caching pools, thread pools, database connection pools, GDI 150 connection parameters, queue sizes etc. The OSG does not simply store such data in a Java property file, which would be read at startup. This approach, which is a documented way in J2SE applications, proves to be insufficient for the following reasons. Runtime changes require a re-read of the property file, and it is not possible to know which key/value property changed, forcing the re-reading of a number of files. Also, triggering the application to re-read the property file would not be elegant, because it would require a busy-polling loop in some property reading code, or a socket approach in which a command-line tool sent a packet to a listening UDP socket, causing the application to re-read certain properties.
In a cluster of multiple OSG servers, the configuration would have to be stored on each server, unless the configuration was stored on a network mounted file system, which would then become the point of failure. Changing properties via property files requires a lot of documentation, because the location of such property files has to be precise, otherwise it will not be found by the application. Also, issues such as user permissions for file reading/writing become a concern.
The Java Management Extension (JMX) is a standard way of managing the configuration and run time properties of managed objects. OSG application components would be managed as a set of MBeans (a JMX compliant term). The OSG design shall add configuration, runtime and instrumentation Management Beans (as per the JMX requirements). These can then be programmatically managed, by remote virtual machines as well as local, and by a JMX management console. The MBeans and management console would be part of the responsibilities handled by OSG Platform Manager 130.
All components of OSG 100 are instrumented with calls to the logging system at different severity levels. The OSG 100 shall use the logging facilities provided by a third party logging API that supports categories as well as priorities/severities. This API is known as Log4Java [Log4Java] and it further supports logging messages of different severities and categories to different streams, including the UNIX system logging daemon, sockets, remote file systems, JDBC database back ends and swing consoles. The Log4J API shall be integrated into the OSG through OSG Log Controller (OLC) 131. The controller itself would be managed using JMX compliant Platform Manager units. This will allow a central configuration station to change the tracing threshold and options at runtime through the JMX change event notification mechanisms.
Initial Reference Bootstrap
The 3GPP specified interface IpInitial will have a CORBA implementation with an object lifecycle of forever (i.e. up on application start and down when application dies). This shall be hosted on each instance of the OSG server running. Each instance, as part of its initialization, shall register itself to the Visibroker Naming Service, and bind to a common name. Visibroker's naming service provides custom extensions to the standard CORBA specifications that allow more than one object reference to be bound to a single name. The URL of this naming service will then be published or made available to the OSG clients so that they can configure the clients to look the server up.
Initiate Authentication
The 3GPP specification details the IpInitial.initiateAuthentication( ) method. The arguments are as follows:
The TpDomainID consists of a unique client ID, which is agreed upon by the OSA client application company and the OSA service provider. This would be a configurable item for OSG.
TpAuthType: A string indicating the type of authentication mechanisms requested. For OSA'99, the TpAuthentication interface is the only one that is mandated, though others of specific network providers' choice may be supplied. (valid value: P_AUTHENTICATION). The return type is the same, a reference to TpAuthDomain, which gives the unique name of the OSG gateway instance, and a reference to its authentication interface.
The authentication interface's lifecycle can be configured to be activated by an Object Activation Deamon of the ORB or to have a new instance created on every request, to save on resources as there is no context to be maintained after successful authentication.
The authentication interface, IpInitial and IpAccess, need not be implemented as a separate implementation servant per OSA client. A POA with a default servant policy for the IpInitial and IpAccess interfaces will result in the same implementation object handling client requests. The method implementations can then obtain the CORBA reference of the client interface that invoked this method. This way, one implementation object can serve all the clients. This is more efficient and conserves resources compared to an implementation that instantiates an IpInitial servant object per client.
Authentication Process
The IpInitial.initiateAuthentication( ) method obtains a reference to the IpAuthentication interface, and the following methods are invoked on it: SelectAuthMethod( ). Parameters are a comma-separated string giving the types of authentication supported (DES 56/128, RSA 512/1024 are OSA recommendations, additional ones maybe present). NULL shows that the client has no capabilities. The OSA Framework at this point has to select an authentication mechanism, and return that to the application, so that it may start the challenge/response according to the mechanism selected.
The authentication implementation is a pass through implementation, therefore there can be no CORBA INVALID_AUTHENTICATION exception, nor can the IpAppAuthentication.abortAuthentication( ) method be invoked. Applications that initiate the first method invoke with SelectAuthMethod( ) will send a NULL string so that it can be established that they have no authentication expectations. If an application does have authentication expectations, then they need to be supplied with an IpAccess reference by name via a named reference bootstrap to circumvent the authentication mechanism.
IpInitial RequestAccess
After the application has been authenticated, (which in our implementation means that every application that has contacted the OSA gets authenticated), then a method call to IpInitial.requestAccess( ) with the type of access required (for OSA it is P_ACCESS). The application provides an IpOSA reference to its IpAppAccess interface and obtains the reference to the IpAccess interface reference to the framework.
IpAccess to Obtain the Service Discovery
Having obtained an IpAccess reference, a method call to obtainInterface is invoked, with a range of framework interfaces specified, of which the OSG only supports service discovery (P_DISCOVERY). Load management, heart beat management and fault management may be supported. Signing service level agreements, and permission checking may also be supported although it may not be desired or necessary. Terminating access by the application and also by the framework is supported.
Listing of the service types, and description of the service types is supported, as specified by the OSA specifications.
Service Registration
This is an internal API for the CORBA server interfaces for each of the Service Capabilities to register, so that they can be advertised with the Service Discovery. Each service shall register when it is ready to accept client requests, and de-register when the service is asked to shut down. The OSG Platform Manager (OPM) 130 would control all the registration responsibilities of intelligent network services control point SCFs.
OSG 100 itself will be started up and shut down by executing commandline scripts. The startup activity would result in OSG Platform Manager 130 to be created and initialized. This would have a ripple effect of creating and initializing the OSG controller interfaces 131-140 driven by the properties specified in configuration files. The shutdown script execution will trigger the closing down of OSG Platform Manager 130 services which would involve shutting down all the OSG controller interfaces 131-140.
A deployment descriptor states whether this service is available to a specific installation of the OSA. If it is installed into the system, then on startup of OSG 100, this service is initialized. A check for the existence of client application information is done with the help of Data Repository. Table creation for storing client information such as call back references and accounting information is done before the service registers itself through the ServiceDiscovery interface.
OSA Framework Controller (OFC) 140 makes an internal method call on ServiceFactory.getServiceManager( ) and obtains an instance of a manager interface. The state to store per client is accounting information for this service, as well as unique notification number creation information.
An object-reference for the service management interface (for e.g. IpCallControlManager) is created and returned to the caller of the ServiceFactory.getServiceManager( ) method. This makes the client have a reference to its own instance of the management interface. The POA policy of these service manager interfaces maybe a default servant POA policy, if its possible to implement the interface as a stateless pass through interface, or a servant manager POA policy, for which a user-supplied object-pool can be used as a factory to reduce the numbers of instances required.
Registration with the Framework
The ServiceRegistry Framework interface is called when a specific service is ready to accept clients.
State to be Stored for All Services
Client CORBA IOR for its IpAppAccess interface. The OSA 110 shall make use of this persisted IOR obtained on client connection. In case the client application has a system crash, the IOR is invalidated, causing a CORBA exception on use, in which case a rebind is performed. Each service has applications registering to obtain certain events as they occur while users make calls or enter and leave service areas.
The CallControl service requires the registration of notifications by applications. These notifications have certain criteria, but the common criteria amongst all services are the Originating and Destination Addresses. Further criteria are service specific.
Representing a Notification Registration
The User Status and Network User Location services require registration for notifications, but apart from their service specific notification criteria, the base requirements are the user's Address. Thus there is no commonality that can be exploited for an inheritance hierarchy apart from the obvious (where the Originating Address is an only component of a common base class). The run-time representation of a notification registration should take into account that equality tests will be performed on the object at a high frequency. Thus efficient computation of object equality will lead to better performance when a notification arrives for a particular service. Because the run-time representation storage should be in a manner that is efficiently searchable, the notification objects shall be stored in a Java Collections object. Sortable collections yield to faster searching because the data is ordered with respect to a given ordering. This requires that notifications have at least a partial ordering. The notification registration class shall implement the java.util.Comparable interface.
The base class has an equals( ) implementation in line with the Sun recommendations for implementing equals. The subclasses over-ride the equals with a first call to super( ). The entire notification searching implementation is abstracted by an interface to allow for more efficient implementations to be used in subsequent versions without significant code impact because the run-time storage structures may evolve to a different storage mechanism. For the preferred implementation, a java.util.SortedMap implementation: java.util.TreeMap, which is a red-black tree implementation, shall be used.
Enable Notification
In this section, the annotation <Service> and <Manager> should be substituted with all the services and service managers that the section is relevant to, i.e. those that are interested in notifications. The clients of any of the services invoke the <Manager>.enable<Service>Notification( ) method, with certain call criteria to enable a call notification. When first invoked, a reference to the client application's peer interface, the IpApp<Service>Manager is obtained. This reference is stored as state in the Ip<Manager>Manager object if obtained by a callback, or along with the notification registration object itself, if supplied in the method (this allows for clients to short-cut the chain of requesters in case the client is a proxy to another client).
The Notification object is a Java class object that stores the state of the notification. Notification includes an identifier that uniquely identifies the client application. This identifier could be an index key to a table that stores client information, or the TpDomainID, which uniquely identifies all OSA clients. An alternative is to store the IOR of the Ip<Service>Manager interface, which would mean that all arguments of the enableCallNotificiation( ) method are persisted. Notification includes the TpAssignmentID, which is a unique number to identify this notification. The application may cancel, or change the criteria of this notification. Finally, notification includes the criteria for a call event notification have a structure specific to the service.
Notification Enabling Policy
The 3GPP specification allows TpAddressRange to have wildcard characters at the beginning or at the end of the address number. This results in one notification mapping to events being generated for multiple subscribers. The types of wildcard characters allowed are �*� and �?� which bear the same semantics as regular expressions in UNIX: �*� matches any number of characters, while �?� matches any one character.
An erroneous application can register for notifications from ALL subscribers, by registering for notifications with an address range of �*�. This would bring an OSG installation to a crawl because ALL calls will cause a message flow via the OSG to the application.
To guard against the possibility of the above happening, a configurable policy is required. Each notification is checked against this policy to guard against the problem mentioned above. The default implementation of this policy shall be described below. Another possibility of strong violation would be the use of �???� for the most significant digits of the calling/called party address. This would also result in a significant number of subscriber records being hit for a particular notification.
The number of subscribers that a registered notification's criteria can match determines how much work the OSA shall have to do for that notification. One way of attaching a weight to a notification is if the weight �0� to any notification that does not have a wild-card, and have a count of the number of �?� wild-cards present in the notification, then an idea of the number of hits that the notification would have, e.g. a number 4 would result in 10,000 subscriber addresses hitting that notification. In the presence of a fixed length of addresses, assigning a weight to the �*� wildcard would be similar, i.e. the max length�the number of bound digits would yield the number of digits that would match the �*�. But there are no fixed length addresses, and hence, an arbitrary maximum must be assigned to calculate the weight. If a number is assigned such that the ordering still remains the same, then the arbitrary maximum need not match the most commonly occurring length of the number.
Registering Event Notifications
This section describes the manner in which the notification registrations from applications are stored in the system for efficient run-time access. First, there should be an efficient search through all the registrations. This is because every call notification that arrives, which maybe up to 10 per second (according to version one of this system) has to be matched against notification registrations that are interested in it. Second, registrations should survive failures. Applications may register for a notification only once. They shall not be expected to re-register incase of system failure. Because of this need, each registration has to be committed to persistent store (database) on registration.
A configurable property (which cannot change after startup of the OSA server) determines whether the OriginatingAddress or the DestinationAddress shall be used as key to store the registration. This is a tunable parameter and greater efficiency results if more applications are interested in specific originating addresses and OriginatingAddress is used for the key, or the same with the destination address.
The wildcard registrations are stored in an ordered list higher weighted entries being stored at the head of the list. The reason for an ordered list versus an ordered tree is as follows: If the numbering plan had a fixed address size, then the originating and destination addresses would have a fixed length. In that case, it would be possible to determine how many characters a �*� would match. It would also be possible to determine if a certain notification was mutually exclusive with respect to another. For example, if the numbering plan length was 11 characters, then �1 732 699 *� would be mutually exclusive to �* 829 8310�, meaning that a call notification would not trigger both these registrations. Because there is no fixed address length, ordering the traversal of notifications such that only mutually exclusive ones get hit proves to be impossible.
If the notification does not have a wild card, then the notification is inserted into an ordered tree. This is because a non-wild card notification will not have two registrations hitting it for the criteria chosen to key on. Thus storing in an ordered tree reduces access time to the order of log(n).
Each notification run-time object shall be passed onto DataRepository, which would result in the object info being persisted to a database whenever a new notification arrived, or it was changed.
The IpCallControl manager interface is created per client upon the client invoking a ServiceFactory.getServiceManager( ) method.
The client invokes the IpCallControlManager.enableCallNotification( ) method, with certain call criteria to enable a call notification. When first invoked, a reference to the client application's peer interface, the IpAppCallManager is obtained. This reference is stored as state in the IpCallControlManager object.
The IpCallControlManager stores the state of the notification. Notification state includes an the following, in addition to the state inherited from its superclass (detailed in section 0):
Note that the incoming argument is an integer, thus the various notifications can be requested in combination, and they are logically OR'd together into a 32 bit integer. As the last notification type is 128, if a client was interested in all possible notifications, it would not exceed 255, hence only 8 bits are used.
The argument would be stored as separate Booleans. This would allow quicker searching to test weather a certain application is interested in a notification that has been generated.
A DataRepository getRegisteredInterface(criteria) method is executed to find the notification state from the database and it is replaced with the new supplied notification criteria. The getRegisteredInterface( ) method has the TpAssignmentID of the old notification registration object to key its search on. The new notification criteria are updated on the data repository only if there was a previously existing entry found.
Disable Call Notification
A DataRepository removeCallNotifyRegistration( ) method is called to remove the notification registration from the set of registered notifications. The notification registration to remove is searched by TpAssignmentID as the key.
This operation does not provide any arguments to narrow down the set of criteria that is to be returned. Therefore, all the criteria that were enabled on behalf of the particular user application that is making this call would be returned. This requires that the application identifier be stored along with the rest of the event registration information in the data repository.
Unsupported Operations
The createCall( ) and setLoadCallControl( ) operations defined in the IDL are not supported by this version of the OSA because they are not expected to be implemented by a 1999 3GPP OSA implementation.
Call Object
When a call occurs, and the intelligent network services control point sends an InvokeApp message with the call details, a new IpCall object is created to model the call. This call object may have a default servant POA policy, which enables a single servant to handle all concurrent calls from all clients, or a user-supplied servant manager POA policy, which allows an object pool to be used as the servant implementation factory. After searching through the currently registered notifications, if a registered notification is found, then the OSA application client interested is informed of the call by passing its object reference as an argument to the Application's Call control manager interface (IpAppCallControlManager). The method invoked by the OSA is the callEventNotify( ) method. The TpAssignmentID of the notification that the client application had registered is returned, so that the client may be able to correlate the call object with its registrations.
Route Request
The client application, upon receiving the call object request, may choose to re-route the call. This method is invoked with a set of arguments that state whether a routing report has been requested, and, optionally, the new subscriber address to which to route the application to.
Invocation of this method by the OSA application purges the call object resources allocated for that call by the OSA, but it does not terminate the call, which may still be going on in the intelligent network services control point. Upon release( ), the call is handled in its normal fashion by the switch.
Setting Calling Plan and Advice of Charge
These methods may be called by an OSA application on the object reference of to the call object reference obtained for the call. All other methods are implemented as per requirements such as the setAdviceOfCharge( ) methods, and setCallChargePlan( ) methods.
Table 1 sets forth the implemented commands.
Hence, the client application identification would be correlated to some key that helps to do a search on the datarepository for all the criteria that are registered from the same client application.
Call User Interaction
This section presents the User Interaction Service, and addresses requirement. As described in the service startup section, the IpUIManager manager interface is created per client upon the client invoking a ServiceFactory.getServiceManager( ) method.
�Create UI Call� creates an instance of a UI Call object, and initializes state to represent either a call leg or a call, as specified in the [3GPP TS 23.127] document. A peer object called IpAppUICall is supplied by the user application.
The set of methods implemented for Call User Interaction are detailed in Table 2 below, with the network message shown alongside.
Network User Location
As described in the service startup section, the IpUserLocation manager interface is created per client upon the client invoking a ServiceFactory.getServiceManager( ) method. Alternately, OGG Platform Manager 130 can choose to pre create this manager. An application invokes a Location Report Request to register interest in one or more subscribers, and gets a unique sessionID of the UI session is created by the unique number assigner algorithm. A Periodic Report Request is the same as above, except that for the set of users specified, the application requests a report to be sent to at a regular interval, specified by the reporting interval. A unique ID is returned to be able to correlate and identify this notification request. The periodic request ends when the application invokes the IpUserLocationCamel.periodicLocationReportngStop( ).
The set of methods implemented for Network User Location are detailed in the Table 3 below, with the network message shown alongside.
User Status
As described in the service startup section, the IpUserStatus manager interface is created per client upon the client invoking a ServiceFactory.getServiceManager( ) method. Alternately, OPM 130 can choose to create it at startup based on deployment descriptor settings. An application can request for a report of the user status for a single user or a set of users. A unique sessionID is created and assigned to the notification so that the OSA may send it to the client when sending a report. This enables an application to correlate the report with its outstanding requests. The peer interface is used by the OSA to deliver user-status reports and errors.
The set of methods implemented for Network User Location are detailed in Table 4 below, with the network message shown alongside.
Intelligent Network Services Control Point Service Access (ISA)
Service Capability Feature (SCF) is the name 3GPP uses to denote the network functionality that is accessible to external applications. These SCFs are provided by various Service Capability Servers (SCS) like intelligent network services control point. While the OSA component 110 of the SCFs are defined by 3GPP, OSG also includes support for SCFs outside these specifications. This component of the OSG is referred to as intelligent network services control point Service Access (ISA) 120. The ISA interface is exclusively for accessing intelligent network services control point capabilities.
ISA is currently a much lower level of an API compared to OSA. It exposes the GDI subsystem and InvokeApp messages. The applications that use these APIs basically use them to make a GDI 150 connection established to intelligent network services control point 200, create InvokeApp Requests, send them to intelligent network services control point 200, and receive InvokeApp responses.
The basic interface is a JAVA API. There are some convenience Java APIs supported as part of ISA that makes the conversion of an InvokeApp message (request or response) from an XML representation to a Java object representation and vice versa. ISA also has a CORBA IDL based interface that provides the same capabilities as the ISA Java interfaces.
GDI and InvokeApp
Generic Data Interface (GDI) 150 provides the capability to send/receive transactions to/from external systems over TCP/IP using TCAP messages. GDI 150 is a service independent interface specification that allows the intelligent network services control point 200 and an external system to define the data to be exchanged for distinct services. Both sides communicate using a machine-independent data representation i.e., Basic Encoding Rules (BER).
InvokeApp is one of the messages that are defined over GDI 150. Logically, the side that is initiating the GDI message flow can be called the client and the side that receives the message can be called the server. Both intelligent network services control point 200 and the external system can assume either of these roles. In either case, the client requests a server to execute an application on behalf of the client and return the results. InvokeApp follows the request/response paradigm. The InvokeApp request message includes an originating system ID, an access ID, a receiver ID, an application name, an action ID, a security ID, and a set of �lagged� parameters. The InvokeApp response message includes the responding system id, the responding access id, the receiver id, the processing application name, the action id, the security id, a result type, and optionally, a set of tagged parameters. OSG 100 treats the InvokeApp subsystem as another service managed by OSG Platform Manager 130 through the OSG InvokeAppController 134.
The InvokeApp subsystem would provide common capabilities for both the OSA 110 and ISA 120 interfaces; and uses modified InvokeAppClient (NFIAC) APIs and Trusted InvokeApp APIs (TIA). The existing InvokeApp client needs changes to support Conversational InvokeApp feature. This involves changes to its Basic (Java) and CORBA APIs . . . as well as the XML convenience interface and DTD. Additionally, GDI InvokeApp capability as a server (InvokeApp Server) needs to be added. The basic infrastructure for this feature exists in NFIAC libraries.
Interactions Across the Arbitrator�InvokeAppService Boundary.
While GDI InvokeApp, is interface of choice with intelligent network services control point in the preferred embodiments, it would also be possible to use other interface options. Hence, the OSA Core business objects are decoupled from the specifics of the mechanisms employed to communicate with intelligent network services control point 200 using the Arbitrator service of the OSG 100 as implemented by the Arbitration Controller 135 of the OSG Platform Manager 130. With this, the core business interfaces could continue to be used even if a situation emerges where the backend system is not an intelligent network services control point. In such a case, the configuration settings could be changed to instruct the business objects to redirect the flow through a different arbitrator interface and that arbitrator implementation can do the interfacing with the relevant far end system using the appropriate protocol handlers.
The arbitrator interacts with far end capability systems (intelligent network services control point, for example) under two modes. The first mode is when the request is initiated from the core business components/objects. The second mode is when the far end system initiates a request to the OSG business components. The OSA invokes methods with OSA specific arguments and the Arbitrator composes the InvokeApp messages.
InvokeAppClient Components are the components that facilitate sending InvokeApp request messages from an external system to intelligent network services control point 200. These components are the same as ISA system components as discussed herein. InvokeAppServer components are the components that facilitate receiving invokeApp request messages from intelligent network services control point. Common Components for GDI/InvokeApp are the components that are used both in InvokeAppClient and InvokeAppServer components. These are essentially GDI protocol handling entities. These include the Transport Related components as well as Encoding/Decoding components. Some of these common components are discussed below.
The ServerEndPoint interface defines a set of methods for managing ServerSockets. Using this interface, any application component can register listeners that will be notified when a connection request to the underlying ServerSocket is received. GDITransport manages the ServerEndPoint on a specified port and the InvokeAppClientHandler registers a ClientListener with the ServerEndPoint.
ServeEndPoint Public Operations are:
The EndPoint interface contains a set of methods for communicating with an InvokeApp-Server. When the GDITransport's ServerEndPoint receives a connection request from an InvokeApp Server, a socket is opened between the InvokeApp Client and Server. The GDITransport object creates an EndPoint representing the InvokeApp Client side of that socket. The interested higher-level application component (InvokeAppClientHandler/InvokeAppServerHandler)registers as a ClientListener and is notified when an EndPoint is created. The higher-level application component uses the EndPoint to communicate with the InvokeApp Server. When intelligent network services control point Resource Adapter (IRA) has to function as InvokeApp server, EndPoint is used to abstract an established connection to an InvokeApp client.
EndPoint Public Operations:
GDITransport defines the interface between the InvokeAppClientHandler and the InvokeApp Server. This interface defines methods to connect to an InvokeApp Server and to get a connection EndPoint. The EndPoint is used to read/write data from/to the InvokeApp Server.
GDITransport Public Operations are:
ClientListener defines a listener for client connection events. The current intelligent network services control point implementation of GDI InvokeApp protocol requires the InvokeApp Server to initiate the connection to the InvokeApp Client. (This is contrary to typical client/server interaction.) ClientListener's are notified when the Server makes the connection.
Client Listener Public Operations are:
MsgEvent is the interface that will be implemented by classes that abstract a GDI InvokeApp message. Hence, both InvokeAppMsg and InvokeAppError implement this interface.
The InvokeAppMsg class represents a GDI InvokeApp message. This could be either an InvokeApp request or an InvokeApp response. The requestMsg data member determines whether the object is a response or request.
InvokeAppMsg private attributes are set forth in Table 5.
MsgCorrelation contains the TCAP TransactionID and componentID for each message. This is used to correlate a request message with its response. Package level constructor ensures that client developed code cannot create an InvokeAppMsg instance with a MsgCorrelation that is not valid. The public operations of MSGCorrelation are:
InvokeAppError class encapsulates the error response that is received from InvokeApp server corresponding to an InvokeApp request that was sent by the InvokeAppClient.
MsgCodec is the interface that let the InvokeAppMsg objects (requests, or responses) to be encoded. As per the InvokeApp specifications, this encoding is done on the Basic Encoding Rules (BER). MsgCodec also provides the interface to get a BER encoded byte stream to be decoded to a InvokeAppMsg.
The public operations of MsgCodec are:
CodecNotFoundException is an inner class of MsgCodec. It is thrown when the InvokeAppClient tries to get a MsgCodec using the MsgCode.Which.codec method and the get fails.
MsgCodecInitException is an inner class of MsgCodec. It is thrown if there are any problems loading the MsgCodec in the static initialization block of the MsgCodec.Which inner class.
MsgCodec.Which is a static inner class in MsgCodec interface. It is used to get an implementation of the MsgCodec interface. The public operations of it are:
EncodeDispatch is responsible for creating and maintaining a threadpool as well as a Runnable Object pool for encoding a message from a MsgEvent object to a byte array. The destination of the byte array is specified by a Delivery implementation. The public operations are:
Decode dispatch is responsible for creating and maintaining a threadpool as well as a Runnable Object pool for decoding a byte array to a MsgEvent object. The destination of the MsgEvent is specified by a Delivery implementation. Its public operations are:
ChoiceEnumeration is an abstract class to support type-safe enumerated types. Various subclasses give the actual enumerated types. A higher overhead compared to having an interface with public member integers, but provides type checking and guards against incorrect value assignment. The subclass needs to be final, and its members which are enumerated choices should be final as well.
ASN1Choice supports ASN notation choices which have a name, a choice value, and also an ASN tag value. This class adds the tag value member to an enumerated choice object. The value will be set automatically using an incrementing static variable. This variable will need to be reset after every subclass has finished its static initialization.
IAErrorChoice is an enumerated type for the InvokeAppError message which can be returned by the intelligent network services control point and may contain the values generalFailure:IAErrorChoice, missingCustomerRecord:IAErrorChoice, dataUnavailable:IAErrorChoice, taskRefused:IAErrorChoice, queFull:IAErrorChoice, timerExpired:IAErrorChoice, systemNotResponding:IAErrorChoice or unauthorizedRequest:IAErrorChoice.
ElementDataChoice is an enumerated type for the ElementData CHOICE member within the InvokeAppData type. A set of InvokeAppData elements make an InvokeAppReq object. The ElemDataChoice identifies which of several types an InvokeAppData element holds selected from the following choices: elemAINDigits, elemBoolean, elemDigits, elemErrorIdentifier, elemIA5String, elemInteger, elemReal, and elemString.
SecurityIDChoice is an enumerated type for the SecurityIdentifier CHOICE field within the InvokeApp message. The InvokeAppMsg class contains a member of this type which indicates which choice has been taken for a particular instance of the message. The values for each enumeration denote the ASN tag values for each. The enumerated values are assigned by the superclass constructor and are the following. pin:SecurityIDChoice, userID:SecurityIDChoice, byTags:HashMap.
ActionIDChoice is an enumerated type for the ActionID CHOICE member within the InvokeApp message. The InvokeAppMsg class contains a member of this type which indicates the choice taken for a particular instance of the message. The type selections are: actionString, actionInteger, actionDigits and by Tags:HashMap.
AppNameChoice is an enumerated type having one of the following values: appNameString, appNameInteger, appNameDigits or by: Tags:HashMap.
ElementErrorType is an enumerated type for the InvokeApp message. The InvokeApp message contains the InvokeAppReq/InvokeAppResp section, which is a sequence of ElementData objects. An ElementData object may contain an ElementError. Note that the enumeration values do not increase sequentially, but correspond to the values in the InvokeApp Specification: general Failure:ElementErrorType, missingCustomerRecord:ElementErrorType, dataUnavailable:ElementErrorType, taskRefused:ElementErrorType, queFull:ElementErrorType, timerExpired:ElementErrorType, systemNotResponding:ElementErrorType or unauthorizedRequest:ElementErrorType.
The TCAP type would be read from a configuration repository/file to determine appropriate encoding scheme. This configuration would be applicable across the entire set interfaces supported from the particular OSG installation in question. In other words, one can configure OSG to use the TCAP type by setting the configuration parameter �TCAP_TYPE� with either a value �ITU� or the legal alternate value �ANSI�; and all the OSG processing would abide by that configuration.
There are configurable InvokeApp Message Parameters, of which the default values associated with the following message fields would be managed in a configuration repository.
Originating System ID
Security PIN
The values managed by this repository would be updateable by system administrator. These values would be used by a factory that creates InvokeAppMessage objects. However, the user applications(Arbitrator interfaces, in OSG architecture) can override these default values. Whether this overriding is allowed or not will be another configurable policy parameter maintained by OSG.
GdiLinkManager manages all the GDI 150 links to intelligent network services control point 200 and takes care of maintaining TCP/IP connections to all nodes in the intelligent network services control point mated-pair configuration. This class also takes care of distributing the GDI 150 traffic among the available links at any point of time. However, the conversational InvokeApp service requires that all InvokeApp messages of a dialog share the same GDI link. GdiLinkManager will not be responsible for ensuring this. Other components of InvokeApp service would have to ensure that all messages of a dialogue go through the same link.
There are more conversational InvokeApp related modifications on codec layer. Also, the InvokeAppMsg would have both OriginatingTransactionID and DestinationTransactionID. Additionally, the user application would have to specify whether the message is to be sent as a TC_BEGIN or a TC_CONTINUE or a TC_END message type.
Arbitrator Components
ISCP Arbitrator is a term that could be used to abstract any kind of mechanism to communicate with intelligent network services control point. Since the mechanism currently is GDI InvokeApp, the present set of Arbitrator components would be targeting a GDI InvokeApp route to get network functionality. The deployment descriptors for arbitrator interfaces would provide one layer of GDI configuration data. This includes: GDI authentication parameters, e.g., intelligent network services control point system name, access identifier, PIN; TCAP type (ANSI or ITU); and, Application Identifier [SSN of intelligent network services control point CAMEL feature set]. Another option is to treat these parameters as management attributes controlled using Java Management Extensions (JMX) and Mbeans.
The basic layers of OSG, namely, CORE OSA objects, Arbitration Objects and InvokeApp Service objects use a mix of synchronous and asynchronous means to communicate with each other. This is because the communication between OSG and intelligent network services control point using GDI is partially asynchronous.
Arbitrator accepts requests from OSA CORE objects (e.g., Call object) and translates the request arguments to an InvokeApp message (with the help of InvokeAppMessageFactory) and sends the message to intelligent network services control point using InvokeAppService object. Intelligent network services control point sends an acknowledgement for receiving the request. This acknowledgement is received by InvokeAppService and it notifies the arbitrator of the same. The arbitrator can notify the OSA CORE object if required. But the transaction is not over yet. Intelligent network services control point might send another InvokeApp message with the same transaction Ids to OSG. That message would have to be processed by the OSA CORE object in the same transaction context. This requires that the OSA CORE objects and arbitrator objects be transaction aware. The interface OsgTransaction is the abstraction of OSA CORE object's view of a transaction. Along with each method call/callback (between OSA CORE objects and Arbitrator), an object that implements OsgTransaction would be passed as an argument.
Now, the Arbitrators that map messages to/from InvokeApp conformant messages would have to have transaction Ids (Both OriginatingTransID as well as DestinationTransID) that obey GDI rules. For this purpose, we have another interface, OsgInvokeAppTransactionContext, which is basically the abstraction of Arbitrator's view of the transaction. This interface has a reference to OsgTransaction interface, so that the arbitrator can map one to another.
State Management
OSA SCFs and associated interfaces are state aware. Operations yield different results depending on the state of the interface. This design proposes to use State Design Pattern for state management. osaCallControlManager has a reference to the current State object. Any state dependant calls that are made on osaCallControlManager is delegated to the State object. OsaCallControlManager acts more like a proxy for these calls.
The alternate approach is to have a �switch(stateVariable)� and �case� sort of branching to account for the state dependent behavior. However, the state pattern based approach makes state management more cleanly structured and maintainable.
When any component needs data access services, it obtains appropriate data handle from DataRepositoryController. The DataHandle obtained would support specific data access operations needed. DataRepositoyService (The DataRepositoryController and various DataHandle interfaces, when implemented) abstracts the details of storing and retrieving data from CORE OSA objects.
The following steps are taken:
The following steps are taken:
The above description has been presented only to illustrate and describe the invention. It is not intended to be exhaustive or to limit the invention to any precise form disclosed. Many modifications and variations are possible in light of the above teaching. The applications described were chosen and described in order to best explain the principles of the invention and its practical application to enable others skilled in the art to best utilize the invention on various applications and with various modifications as are suited to the particular use contemplated.
Patent Citations
Non-Patent Citations
Referenced by
Legal Events
Original Image


text:
NICU Interview... HELP! - page 2
by bnc0725 6,062 Views | 10 Comments
Hello everyone! I have been a pediatric home care nurse for about 15 months. I have always wanted to be a NICU nurse ... even before Nursing School! I have been applying for positions since July 2011! And after 15 months... Read More

subset: commoncrawl


text:
Monterey Jack 1840 Cheese Slices
£1.00 (£10 per kg)
Product Summary
Cheese made from an authentic American recipe. A distinct smooth&creamy cheese. Ideal for BBQs and burgers. Suitable for vegetarians.
Keep refrigerated.…Once opened, consume within 3 days.
Please note that whilst we take every care to ensure the product information displayed on our website is correct, product recipes are regularly changed and this may affect nutrition and allergen information therefore you should always check product labels and not rely solely on the information presented here.If you require specific advice on any Waitrose branded product, please contact Customer Support on 0800 188884 or email firstname.lastname@example.com. For all other products, please contact the manufacturer.This information is supplied for personal use only. It may not be reproduced in any way whatsoever without the prior consent of Waitrose Limited nor without due acknowledgement.


text:
Hermes Pocket Scarf Gavroche Pochette Peuple Du Vent by Christine Henry New in Box with Tag. Available for your consideration is a bright, vibrant and Authentic Hermes Peuple Du Vent ("People of the Winds") Pocket Square, Gavroche or Pochette Scarf designed for Hermes by artist, Christine Henry. From Hermes' 2009 Spring/Summer Collection, the scarf was crafted in France of 100% silk. The theme is inspired by people who are constantly on the move and travelling the world, such as Tziganes, Gypsies and Bohemians, among others. According to legend, People of the Winds are in harmony with nature and are reputed to have certain unique abilities, such as communicating with animals and fortune telling. Singing and dancing are an integral part of their culture. Hermes Peuple Du Vent Silk Scarf brings together all of these symbols. The left features the tree of life surrounded at each corner by gypsy dancers. Branches platform tightrope walkers, musicians, a miniature gypsy caravan and animals. Detail is the lower portion of the scarf depicts the legend of Sara, the Black Virgin. People of the Winds were designated by the UN in 1971 as a single population now referred to as "Roma." Their emblem is a wheel, referring to that from a gypsy caravan or from the fortune teller. Their flag is half blue, like the sky, and half green, like the pastures, with a wheel in the left similar to an Indian chakra. Primary colorways are violet, turquoise and encre. The Hermes Peuple Du Vent design is harmoniously rich. The Hermes Peuple Du Vent Silk Pocket Scarf by Christine Henry offers a superb method to add definition to an outfit. It is chic, striking, and the style of accessory that can define an ensemble.
The scarf measures approximately 16" x 16". It is in brand new, never previously worn condition. The original tag remains attached
The gorgeous and exceedingly upscale Hermes Peuple Du Vent Silk Pochette, Gavroche or Pocket Square Scarf will come to you safely tucked inside its original Hermes signature orange box. You will also receive the original tag.


text:
Cafe Vico Ristorante
- Address:
1125 North Federal Highway
Ft. Lauderdale, FL 33304Neighborhood:
Fort Lauderdale
- Cuisine:
ItalianPrice: $31 to $50
Cafe Vico Ristorante
- Dining Style: Fine Dining
- Website: http://www.cafevicorestaurant.com/
- Phone: 9545659681
- Hours of Operation:
Lunch: Monday - Friday: 11:30am - 3:00pm; Dinner: Sunday - Thursday: 5:30pm - 10:00pm, Friday - Saturday: 5:30pm - 11:00pm
- Payment Options: AMEX,Discover,MasterCard,Visa
- Cuisine: Italian
- Executive Chef: Marco Vico
- Dress Code: Smart Casual
- Accepts Walk-Ins: Yes
- Additional Details: Banquet/Private Rooms, Bar Dining, Bar/Lounge, Beer, Cafe, Entertainment, Full Bar, Non-Smoking Area, Patio/Outdoor Dining, Personal wines welcome, Personal wines welcome (corkage fee applies), Private Room, Smoking Area (patio only), Takeout, Wheelchair Access, Wine, Wine Bar
- Private Party Facilities: Private room for 18 people and another private room for 32 people.
- Private Party Contact: Alex 9545659681
- Entertainment: Wine Dinner Movie is present once a month, check website for dates
A word from Cafe Vico Ristorante
Homemade pastas, award winning Lasagna Bolognese, full bar service and private rooms availableContinued
Foodspotting photosSee all photos
Awards voted by OpenTable diners
- Diners' Choice WinnerNeigborhood Gem
- Diners' Choice WinnerItalian
- Diners' Choice WinnerMost Booked 1000-Point Tables
Cafe Vico Ristorante - Best Restaurants in Fort Lauderdale ›
Cafe Vico Ristorante reviews from OpenTable diners
130 reviews since July 3, 2014
- Food4.5Service4.4
- Ambiance4.4Noise LevelModerate
neighborhood gem (88)romantic (66)special occasion (66)fit for foodies (64)good for groups (56)notable wine list (43)vibrant bar scene (38)hot spot (20)great for outdoor dining (19)late-night find (17)kid-friendly (9)great for lunch (8)great for brunch (3)scenic view (1)Show More
- Excellent choice !NormanDined on 10/23/2014My wife and I had dinner for the first time since the upgrade of the bar and it a home run ! Music at the bar, a great bartender, an owner who pays attentions to detail and the food was outstanding. This is a "must try " restaurant when you are in the Fort Lauderdale area.Special Features:
- CBCFlVIPDined on 10/23/2014It was good but not the best itslisn,may fish was very good but the pasta sauce was to spicy for marinara the shrimp scampi was good waiters need to be more service oriented oh the cs lois however are fresh , would need to try the homemade pasta which is their so specialty I guessSpecial Features:I would recommend this to a friend.
- food loverfoodloverDined on 10/17/2014Food was exception as was the ambiance but the noise level was off-putting. The noise from the bar was overwhelming at our table so the next time I go, I would ask for a table as far away from the bar as possible.Special Features:
- Wow...a real gem :)foodlover12Dined on 10/12/2014Lived here 20+ yrs... never knew about Cafe Vico until this wknd. Now it's our #1 Italian place in SFla and we've eaten at quite a few of the top names. We're already planning to return for happy hour or dinner in the next few weeks. This is another one of those gems, like Timpanos, that has a romantic, retro atmosphere we both adore and can't find very often. Pianist and lounge was a pleasure: we sat in the dining area, but could hear the music. The carpaccio was seasoned perfectly. Our entrees were terrific - black pasta and spicy sauce for me and my husband's favorite: Veal Piazzola. It wasn't on menu but they gladly made it. The house Chianti was quite tasty and reasonably priced. The espresso was even great: usually weak elsewhere.Special Features:
- CoastalGirlDined on 10/11/2014Excellent and knowledgeable wait staff. Food was excellent - compliments to the Chef !Special Features:
- Birthday dinner celebrationlocaldinerDined on 10/11/2014Called to ask about special birthday desert and staff said they could bring tiramisu with candle. He was confirmed my reservation and request. . But on night of dinner, nothing happened. Disappointed. However meal good. And overall nice evening.Special Features:I would recommend this to a friend.
- Always a Great MealOpenTable Diner Since 2011VIPDined on 10/10/2014from appetizer to coffee and dessert, it's always consistenly good food. New piano bar that opened is gorgeous.Special Features:
- OpenTable Diner Since 2014Dined on 10/5/2014The food was very good and the service was also good.Special Features:
- Fabulous!OpenTable Diner Since 2014Dined on 10/4/2014Second time I've been there and it was fantastic! Food is excellent, service is amazing and the ambiance is wonderful. My new favorite restaurant.Special Features:
- Don't miss it!OpenTable Diner Since 2014Dined on 10/4/2014This is the place for authentic italian food - like your momma used to make! I will be dreaming about this food for weeks.... trying to figure out a future trip to Ft Lauderdale just to eat here again. Everything from the melt in your mouth burrata appetizer to the bechamel lasagna......I am so glad a local told me to dine at Cafe Vico.... an experience to remember!Special Features:
- JerryOpenTable Diner Since 2012Dined on 10/4/2014as always, a fantastic and romantic dining experience !Special Features:I would recommend this to a friend.
- Wonderful GroupGerryWDined on 10/3/2014Everyone that works there says hello and willing to serve. The owner is always super nice when greeting you at the doorSpecial Features:
- A whole new experiencereviewsDined on 10/3/2014The food is and has always been over the top. They just added a piano bar in a totally separate room I was anticipating a piano with seats. However, they added a full sized bar Great move.Special Features:I would recommend this to a friend.
- TracyDined on 9/21/2014You can always count on great food, great service and a fun filled environment. The new remodel looks amazing. A true neighborhood gem.Special Features:
- AliCatFLVIPDined on 9/21/2014My flounder rollatini with salmon, shrimp & asparagus and my husbands veal shank were both exquisite.Special Features:I would recommend this to a friend.
- Cafe Vico never disappoints!KatyDined on 9/20/2014My husband and I have been eating at Cafe Vico since it was a tiny, cozy one room restaurant. In response to its popularity, Marco (the always charming proprietor) has expanded, yet he has maintained this local hot spot's charm and exceptional menu and service. Whether you are looking to dine at a romantic spot, spend time with close friends, have a family gathering, or plan a business dinner for a large group, Cafe Vico will never disappoint!Special Features:I would recommend this to a friend.
- Another great mealjfs226VIPDined on 9/17/2014I must hand it to the team at Café Vice, what a place. The food is always on the mark, service too. I love my linguini in white clams sauce while my husband is delighted with all their veal dishes. Try the café, you will NEVER be disappointed.Special Features:I would recommend this to a friend.
- Hidden GemItalianDined on 9/14/2014I never would have chosen this restaurant given that is in a strip mall and kind of out of the way - actually I probably wouldn't have ever even noticed it but I had a Living Social voucher and went there and was so glad I did. We ate outside and it was very quiet since it was a warm night and everyone else was inside. I'm not sure how the noise level was inside. The food was very excellent - just everything about it was great!!! Definitely recommend it.Special Features:
- Edinamission2dineDined on 9/13/2014A typical Italian cantina with excellent food. Friendly and attentions waiters, and the welcome of the chef and owner at your table make this place a must. A little noisy at times, but Italian restaurants are noisy anyway, aren't they?Special Features:I would recommend this to a friend.
- Best Italian restaurantPassionate4foodVIPDined on 9/11/2014This is a wonderful dining spot my new favorite restaurant in Ft. Lauderdale!!Special Features:I would recommend this to a friend.
- Nice RenovationLocalDined on 9/11/2014The remodel is a big improvement over the previous awkward walk through arrangement. Food still good if a little pricey. The live music in the new bar area is way too loud.Special Features:I would recommend this to a friend.
- One of my faves!OpenTable Diner Since 2010VIPDined on 9/7/2014The lasagna is to die for! Hometown gem where everything tastes fresh and authenticSpecial Features:I would recommend this to a friend.
- OpenTable Diner Since 2010Dined on 9/6/2014Outstanding neighborhood restaurant that consistently serves an excellent meal. The new bar area and entertainment has taken the restaurant to a new level. perfect for a full course meal or if you just wantto sit at the bar and listen to good musicSpecial Features:I would recommend this to a friend.
- Cafe Vico = PerfectionMJR33065Dined on 9/6/2014Everything about this restaurant was just beautiful. The food was amazing and the staff takes care of every detail..Special Features:
- MexicanVIPDined on 9/6/2014Having dining their for years, it was very disappointing. Sine their renovation I think they are suffering from growing pains. Will try it agin in high season.
- Not the Same :(OpenTable Diner Since 2014Dined on 9/6/2014Service was great! Food for good, not great. Atmosphere was way too crowded and noisy! With all the expansion they've done, they seem to have lost the desire to keep the atmosphere intimate and cozy.Special Features:
- Started out with bad servicepompDined on 9/4/2014But the food was very good and they tried to make up for the poor service in the beginning with good service later. We had to wait 20 minutes for our table (late on a Thursday night and we could see a few open tables in the dinning room), then it took another 20 miniutes to get a drink. So our first drink was 40 minutes after the time of our reservation, then first food at 9 (one hour after reservation). There were plenty of open tables when we were eating, they were not too busy by that time.Special Features:
- Good ItalianFrankinHKVIPDined on 9/1/2014The food and service here was very good. Friendly, efficient service. I will return.Special Features:
- Favorite places to eat in FLFish80Dined on 8/31/2014Great place to eat/ service and food is always goodSpecial Features:
- Long time customer :-(OpenTable Diner Since 2005Dined on 8/30/2014Remodeling is beautiful. New prices, too high...you're not D'angelos. $49.50 for veal chop Milanese ? $28 for veal parm? $37 for yellow tail snapper filet special? $25 wine corkage, and all I got was small red wine glasses. Love this place, hate the new higher prices. Marco's hospitality is second to none.Special Features:I would recommend this to a friend.
- MavenVIPDined on 8/30/2014Cafe Vico is always an excellent choice, nice menu excellent specials, pasta is delicious. The new renovations make the place trendy and upscale, lost some of its old dated look.Special Features:
- Great evening outLiscodojDined on 8/28/2014Splendid food and unrushed service made for a very pleasant evening.Special Features:I would recommend this to a friend.
- Great JobSck3297Dined on 8/23/2014My girlfriend and I had an excellent experience dining here. The food, the service, and the atmosphere were all 5/5. We will be coming back soon and will recommend to friends and family!Special Features:I would recommend this to a friend.
- Bigger not Better YetprofjoeVIPDined on 8/20/2014Mario has expanded Cafe Vico. Now with a large piano bar, live piano or other music and a new entrance. The service was very attentive. Traditional Italian fare is still very good and carefully watched over by Mario himself. Wine list is one of the better ones for Italian wines.Special Features:
- Overpriced and OverratedBlueCollarFoodCriticVIPDined on 8/20/2014I went to this restaurant after reading very favorable reviews. I found that the fine dining prices did not reflect the quality of the food or the service. Imaging paying $37 for a locally sourced yellowtail snapper filet, and when the server arrives at a table for two, has to ask who ordered the fish and who ordered the chicken. Café Vico includes potato and vegetable with all entrees. This amounts to a spoonful of sweet potato, two tiny broccoli florets, and a small separate dish of penne pasta with tasteless marinara sauce. The chicken marsala came pounded so thin (about 1/4" thick) that it lacked tenderness. It was accompanied with a properly prepared marsala sauce. Don't bother with the Caesar salad with its store bought dressing.Special Features:
- Great mealOpenTable Diner Since 2011Dined on 8/18/2014The service and food are excellent. Markos make you feel like family!Special Features:
- MavenVIPDined on 8/18/2014Cafe Vico is a delight. Everyone we take to this restaurant walks away happy and satisfied. The food is consistantly good and the new renovations are lovely. it is a neighborhood find.Special Features:
- Not so great this timeEnzotheBakerDined on 8/17/2014First visit since remodel. Have dined here at least 20 times, this was the first one classified as a "miss". New bar is lovely. Seating area for dinner (in the back)was much too dark, couldn't read the menu without using light from our phones. Bread and garlic oil delicious as always, same for the carpaccio and special sausage app. The lobster special had excellent homemade pasta, the lobster was overcooked, dry and not edible. The lasagna was tasty. The desserts were the big letdown. The creme brûlée and apple tart both looked and tasted old and were nowhere near the previous standards. Server had to be asked to tell us the specials and forgot our coffees with dessert. Overall a 5-6 out of 10 for a place that usually hits a solid 9.Special Features:I would recommend this to a friend.
- 17 Years of ExcellencehatetocookDined on 8/17/201417 years of excellence. One of the first restaurants we ever went to when moving here and we have witnessed the wonderful growth of the business. Always a fine dining experience which we recommend to friends and newcomers all the time.Special Features:I would recommend this to a friend.
- Much Better From The Insidebruce4gunsDined on 8/17/2014When you look at it from the outside you are doubtful. When you get inside you feel like you have come home. When you get your food you then you realize you really want to come back often.Special Features:


text:
Twenty four losses in a row. That's what happened tonight. The Sixers moved ahead of the Vancouver Grizzlies (1995-96), Denver Nuggets (1997-98) and Charlotte Bobcats (2011-12) for the second-longest, single-season losing streak. The next two games are at San Antonio and Houston, almost automatic losses. Well, those games are automatic losses. That sets the Sixers up with a match-up against Detroit at home on March 29th which could set the NBA record losing streak at 27 games in a row. Detroit is a bad team, but so are the Sixers. At least the Pistons have talented names on their roster. Lets take a view at some quick notes from tonight's game.
Quick Hits:
- Henry Sims continued to impress, posting 18 points and 15 rebounds in 31 minutes — he was 8-of-15 from the field.
- Michael Carter-Williams finished with seven points, 11 rebounds and six assists. MCW shot 3-of-14 from the field, continuing to struggle mightily from the field.
- Besides Sims, Thaddeus Young was the only other Sixer in double figures, posting 28 points and seven rebounds on 10-of-26 shooting. Young was a dismal zero-for-seven from deep.
- Tony Wroten will miss the teams three game road trip with a sprained ankle..
Tags: 76ers Chicago Bulls Detroit Pistons Philadelphia 76ers Sixers


text:
Narrow your search
The carrier ups the ante again with its iPhone-leasing program that starts at $30 a month and allows customers to swap in a new device each year. The offer takes effect on November 14.
Samsung's latest smartwatch can make calls and work independently of a smartphone. But is that what consumers really want?
Every year, lifehackers everywhere gather together in the San Francisco Bay Area and New York to peddle their own special brand of DIY genius.
The social network is getting ready to launch a mobile ad platform that will allow it to better challenge Google's AdMob, Recode reports.
A quirk in Samsung's latest phablet could potentially make it harder for users who choose to install their own operating system to have their warranties honored.
The company has been testing iPad screens in recent months that measure almost 13 inches diagonally, The Wall Street Journal reports.
"The Imitation Game" opens the 2014 London Film Festival, heralding a number of movies exploring our complex relationship with technology.
If you missed out on the official Nike Air Mag shoes back in 2011, you can now get a much more affordable officially licensed replica for your Marty McFly costume.
The IPO promises to be one of the biggest events in Yahoo's recent history. But after the expected multibillion-dollar windfall, the company's going to be under intense pressure to improve performance.
It won't let your wrist fire a laser beam, but this watch face design will transform your time piece into the classic smartwatch of N64-era James Bond.


text:
Book Review
Genre: Erotic Romance, Futuristic
2013 Paranormal/Fantasy/Sci-Fi Erotic Romance Nominee
McCormick's No Limits introduced some of the characters that take center stage, and here they are wildly complex and sexually uninhibited. This is not for the faint of heart. There is a brutal society described, and it forces the hero to make some very emotional choices. The zigzag nature of events makes this a completely satisfying page-turner. Includes m/m, f/f and f/f/m content.
Stinger pilot Gia is just looking for a quick hookup. When she runs into space pirate Zan, they quench their passions and discover they have more in common than they realize. After a series of mishaps, they end up stranded on Zan's home planet and at the mercy of his sadistic father. When her health shield malfunctions, Gia experiences many of Zan's memories, which pulls them closer together. (APHRODISIA, Feb., 256 pp., $14.00)
Reviewed By: Jacqui McGugins
Publisher: APHRODISIA
Published: February 2013


text:
15 gadgets every 8-bit gamer needs
Summary: If you're a gamer who loves the 8-bit era, you have no excuse not to own at least half of the items on this list! This gallery picks up from assuming you already own at least your favorite 8-bit system...
7 of 15Image
As a guitarist and an 8-bit gamer, the NES guitar was a no-brainer for me to own. But even if you don't play guitar, having this fine instrument hanging on your wall will produce a level of street cred higher than any you could achieve in River City Ransom.
This is a pair of Converse shoes with an original Super Mario Bros. pattern on them. Seriously. Link for additional info. That is all.
If you thought the GP2X Caanoo was awesome, wait until you get a load of the Open Pandora! Yes, it will cover all of your 8-bit gaming needs, but it's so much more than that. It will even run PC games, in addition to allow you to browse the Web, remotely administer systems, and much more. It is arguably the ultimate in non-mass-produced handheld console systems!
Kick off your day with ZDNet's daily email newsletter. It's the freshest tech news and opinion, served hot. Get it.


text: 24 September 2011 VOCATUS ATQUE NON VOCATUS DEUS ADERIT. Jung carved a Latin inscription above the door of his house in Kusnacht, Switzerland: "VOCATUS ATQUE NON VOCATUS DEUS ADERIT." In English translation, the inscription reads: "Called or not called, God will be there." In a letter of November 19, 1960, Jung explains the inscription: By the way, you seek the enigmatic oracle Vocatus atque non vocatus deus aderit in vain in Delphi: it is cut in stone over the door of my house in Kusnacht near Zurich and otherwise found in Erasmus's collection of Adagia (XVIth cent.). [Jung had acquired a copy of the 1563 edition of Erasmus's Collectaneas adagiorum, a compilation of analects from classical authors, when he was 19 years old.] It is a Delphic oracle though. It says: yes, the God will be on the spot, but in what form and to what purpose? I have put the inscription there to remind my patients and myself: Timor dei initium sapiente ["The fear of the Lord is the beginning of wisdom."] Here another not less important road begins, not the approach to "Christianity" but to God himself and this seems to be the ultimate question. (1975: 611)


text:
Michelin announces voluntary recall of 100K tires
WASHINGTON (AP) — Michelin is voluntarily recalling 100,000 tires after a retailer discovered that some had holes and quickly deflated.
Business News Headlines – Yahoo! News
Category: Headlines
Comments (0)
Trackback URL | Comments RSS Feed
There are no comments yet. Why not be the first to speak your mind.


text:
Sorry for the sudden hiatus! And hello to all new followers!
So hey! I have a new personal Tumblr now, ronchronchronch! Fuckyeahpulps will still be updated, this is just for me to blather on about comics and movies and other nerdy things that'll save this tumblr from off-topic posts. You're more than welcome to follow me there as well! :)
…which was made into a 1976 film starring David Bowie.
Walter Tevis's The Man Who Fell to Earth…
Gotta love pulp art. And the copy text is HILARIOUS.
indeed! thanks to almostlucy
(via fyeahqueervintage)
"We need to make books cool again. If you go home with somebody and they don't have books, don't fuck them."


text:
Photos of the day - May 9, 2013
The Salt Lake Tribune
Published: May 9, 2013 03:12PM
Updated: May 9, 2013 03:12PM
Ariel Castro appears in Cleveland Municipal court Thursday, May 9, 2013, in Cleveland. Castro was charged with four counts of kidnapping and three counts of rape. Ariel Castro was charged while his brothers, Pedro and Onil Castro, were held but faced no immediate charges. (AP Photo/Tony Dejak)
A collection of some of the best photos of the day, from throughout the world.
© Copyright 2014 The Salt Lake Tribune. All rights reserved. This material may not be published, broadcast, rewritten or redistributed.


text:
I had rhinoplasty in August 2013 in NYC. Unfortunately the surgery did not go as planned and I am left with a nose worse than my original. As of now I am researching doctors that specialize in revision. I have spoken to a couple of doctors and they would like to see my before pictures, the simulation pictures and the post op report. I am waiting for my doctor to email these items.
I can not believe I have to go through this again. I can not believe the money I spent to have a nonfunctional distorted nose. While researching a doctor the first go I chose my doctor because his before and after pictures were exceptional. Additionally, I was in contact with two of his patients who had nothing but good things to say about him and when I saw their before and after photos I was convinced.
Help! Looking for a Revision Rhinoplasty Specialist - New York, NY
I had rhinoplasty in August 2013 in NYC. ...
Read 1 Comments
Thank you for sharing your experience on RealSelf! Here's what some doctors say about revision rhinoplasty doctors in NYC. Take care and please keep us posted on what you decide to do.
Dr. RIchard Davis
I emailed Dr. Davis pictures a few weeks ago and he responded immediately. After nine months I will have a in person consultation with him. He is just one of the doctors I will consult with.
Read 0 Comments
nose is worse
Nose is getting worse by the day. Now I have a cartilage sticking out. If someone is reading this can you tell me if this is coming up on the review or question section?
Read 1 Comments
Hey, thanks for posting. When's your consult with Dr Davis? I'm also looking into him for a revision and would love it if you could post your thoughts after you've met with him. Wishing you all the best in your search for a revision surgeon:)
3 out of 5 stars
5 out of 5 stars
5 out of 5 stars
3 out of 5 stars
4 out of 5 stars
2 out of 5 stars
3 out of 5 stars
4 out of 5 stars
5 out of 5 stars
Was this review helpful? 2 others found this helpful


text:
Hampton Inn Myrtle Beach - Northwood
No availability found through our partners. Please contact the business directly or check some of our recommended alternatives.
How has this hotel rated in the past?
- Continental Breakfast
- Suites
- Adjoining Rooms
- Free High-Speed Internet
- Beach
- Swimming pool
TripAdvisor Reviews Hampton Inn Myrtle Beach - Northwood
Travel Blogs from Myrtle Beach
A beach and some pitching pelicans!
... course featuring dry ice and animatronic dinosaurs, a battle between father and sons resulted in a nail biting tie!
Taking a chance on the weather we paid a visit to the excellent minor league baseball stadium of the Myrtle Beach Pelicans and had a splendid evening with tickets very close to the action. And as ...
We're by the beach ...
... far, but have a few Internet connection issues here at the condo. This has required Andrew to become well acquainted with the technical support folks at the local broadband company and has also meant a trip out to their shop in a nearby town to pick up a replacement modern. We're hopeful of a resolution tomorrow, but at the moment the speed just isn't good enough to upload any photos.
In the meantime, I'm doing some work, while the kids and Andrew ...
Day 30-32: Myrtle Beach/Huntington Beach
... a "causeway" that is surrounded by the salt marsh. People were walking up and down the sidewalks, peering into the water at something. Once we got closer we realized they were all staring at an ALLIGATOR. Unfortunately we couldn't stop our car on the causeway so we glued our faces to the windows as we drove past. SO COOL! When we registered for our campsite (the campground was completely booked, so glad we make reservations months ahead!) I told ...
Celebrating 4th of July on the beach!
... great time in the large waves of myrtle beach.
The bartender Alex made some great drinks over the day and the cook, Will, made us great food all day long.
As sundown approached, Craig headed home to grab his stash of fireworks that took up most of his dining room! We had to load it into a small portable dumpster to get it out onto the beach! Justin helped Craig load the "mortar" tubes into the sand! He ...
Day 26 - Myrtle Beach
... for dinner somewhere near here tonight. Tomorrow we are off to Georgetown on route to Charleston.
After our workout at Golds Gym we enjoyed a lovely lazy day by the pool today our first full pool day on this trip and the last I'm sure so we took full advantage of it. Lots of happy American folk hanging ...


text:
- Forum: Instruction and Playing Tips
- Thread: Longest iron you can play
6i My irons get worse the lower they go until I pull out my 3 hybrid. Also I've noticed that while I hit my 6i about 190 yards, I hardly gain any yardage from my 5i through 3i until i hit my 3 hybrid. I've never been able to figure that out.