What is multitenancy? Why it’s becoming so important?

The term “Software Multitenancy” refers to a software architecture in which a single instance of software runs on a server and serves multiple tenants. A tenant is a group of users who share a common access with specific privileges to the software instance. With a multitenant architecture, a software application is designed to provide every tenant a dedicated share of the instance – including its data, configuration, user management, tenant individual functionality and non-functional properties. Multitenancy contrasts with multi-instance architectures, where separate software instances operate on behalf of different tenants.
Some regard multitenancy as an important feature of cloud computing.

While multi-tenancy takes forward some of the concepts of mainframe computing to the x86 server ecosystems, its ongoing efforts to scale up these mainframe concepts to support thousands of Intra- and inter-enterprise tenants (not users) are complex, commendable and quite revolutionary. It’s only when the required degree of multi-tenancy is incorporated into all the layers of public and private clouds that the promises of improved scalability, agility and economies of scale can be fully delivered.

In cloud computing, the meaning of multi-tenancy architecture has broadened because of new service models that take advantage of virtualization and remote access. A software-as-a-service (SaaS) provider, for example, can run one instance of its application on one instance of a database and provide web access to multiple customers. In such a scenario, each tenant’s data is isolated and remains invisible to other tenants.

Database (Oracle) Multitenancy?

A new option for Oracle Database 12c, Oracle Multitenant helps customers reduce IT costs by simplifying consolidation, provisioning, upgrades, and more.

  • High Consolidation Density
  • Rapid Provisioning and Cloning Using SQL
  • Rapid Patching and Upgrades
  • Manage Many Databases as One
  • Pluggable Database Resource Management
Posted in Cloud Computing, Database Technologies, Emerging Trends, Oracle | Leave a comment

Oracle 12c top 12 features

Tom Kyte has picked his top 12 features of Oracle Database 12c and put them into a presentation. Here are his picks:

  1. Even better PL/SQL from SQL
  2. Improved defaults
  3. Increased size limits for some datatypes
  4. Easy top-n and pagination queries
  5. Row pattern matching
  6. Partitioning improvements
  7. Adaptive execution plans
  8. Enhanced statistics
  9. Temporary undo
  10. Data optimization capabilities
  11. Application Continuity and Transaction Guard
  12. Pluggable databases

http://www.oracle.com/us/products/database/videos/db12c-top-12-features-1947167.html#vid=2112353336001

 

 

Posted in Database Technologies, Oracle | Tagged , , | Leave a comment

In-Memory Column Store in Oracle Database 12c Release 1 (12.1.0.2)

In-Memory Column Store in Oracle Database 12c Release 1 (12.1.0.2)

In-Memory Column Store feature in Oracle Database 12c Release 1 (12.1.0.2) promises to address such kind of real-time reporting and statistic requirements at ease. This feature offers users best of both worlds (power of OLTP and OLAP/Analytics with a single database). One can push the entire table in memory or choose only selective columns to be in-memory.
Though, it comes at a cost (12c license and huge SGA memory) but worth exploring. It should assume a place in our product roadmap.
This feature allows you to store table columns in memory in a columnar format, rather than the typical row format.

— Row Oriented systems
To serialize each row of data, like this;

001:10,Smith,Joe,40000;
002:12,Jones,Mary,50000;
003:11,Johnson,Cathy,44000;
004:22,Jones,Bob,55000;

— Column Oriented systems
A column-oriented database serializes all of the values of a column together, then the values of the next column, and so on. For our example table, the data would be stored in this fashion:

10:001,12:002,11:003,22:004;
Smith:001,Jones:002,Johnson:003,Jones:004;
Joe:001,Mary:002,Cathy:003,Bob:004;
40000:001,50000:002,44000:003,55000:004;

–Comparisons and Benefits
If an application can be reasonably assured to fit most/all data into memory, in which case huge optimizations are available from in-memory database systems.

Column-oriented organizations are more efficient when an aggregate needs to be computed over many rows but only for a notably smaller subset of all columns of data, because reading that smaller subset of data can be faster than reading all data.

In practice, row-oriented storage layouts are well-suited for OLTP-like workloads which are more heavily loaded with interactive transactions. Column-oriented storage layouts are well-suited for OLAP-like workloads (e.g., data warehouses) which typically involve a smaller number of highly complex queries over all data (possibly terabytes).

For further details, one can refer to:
https://oracle-base.com/articles/12c/in-memory-column-store-12cr1

 

 

Posted in Cloud Computing, Database Technologies, Oracle | Tagged , , , , , , , , | Leave a comment

Re-Organize / Defrag database schema using ALTER TABLE MOVE TABLESPACE option

There are several ways for a complete reorganization and space reclamation:-
  • EXPORT/IMPORT
  • DBMS_REDEFINITION
  • CREATE TABLE AS SELECT (CTAS)
  • DATA PUMP
  • ALTER TABLE MOVE TABLESPACE
This post provides a trick to reorganize all schema objects using the following script using ‘ALTER TABLE MOVE TABLESPACE’ option.
 
— with LOB and partition segments
— Move tables
select ‘ALTER TABLE ‘ || OWNER || ‘.’ || TABLE_NAME || ‘ MOVE TABLESPACE ‘ || ‘DASCORE_37’ || ‘;’ from DBA_TABLES WHERE OWNER IN (‘DASCORE_37’);
— Rebuild indexes
select ‘ALTER INDEX ‘ || OWNER || ‘.’ || INDEX_NAME || ‘ REBUILD TABLESPACE ‘ || ‘DASCORE_37’ || ‘;’ from DBA_INDEXES WHERE OWNER IN (‘DASCORE_37’);
— Move a table partition segment. 
select ‘ALTER TABLE ‘ || TABLE_OWNER || ‘.’ || TABLE_NAME || ‘ MOVE PARTITION ‘ || partition_name || ‘ TABLESPACE ‘ || ‘DASCORE_37’ || ‘ NOLOGGING;’ from DBA_TAB_PARTITIONS WHERE TABLE_OWNER IN (‘DASCORE_37’);
–ALTER TABLE tab1 MOVE PARTITION part_1 TABLESPACE new_ts NOLOGGING;
 
— Rebuild an index partition segment.
select ‘ALTER INDEX ‘ || INDEX_OWNER || ‘.’ || INDEX_NAME || ‘ REBUILD PARTITION ‘ || partition_name || ‘ TABLESPACE ‘ || ‘DASCORE_37’ || ‘ NOLOGGING;’ from DBA_IND_PARTITIONS WHERE INDEX_OWNER IN (‘DASCORE_37’);
–ALTER INDEX ind1 REBUILD PARTITION ind1_part1 TABLESPACE new_ts;
 
— Move LOB segments if we had them.
select ‘ALTER TABLE DASCORE_37.’|| table_name || ‘ MOVE LOB(‘|| column_name || ‘) STORE AS (TABLESPACE DASCORE_37);’ from dba_tab_columns 
where owner like ‘DASCORE_37’ and data_type like ‘%LOB%’;
–ALTER TABLE tab1 MOVE LOB(lob_column_name) STORE AS (TABLESPACE new_ts);
One need to run the execute the output of dynamic SQLs run above to reorganize and de-fragment tablespace and free up disk space.
Posted in Database Technologies, Oracle | Tagged , , , , , , | Leave a comment

HSQLDB – Hyper SQL Database

HSQLDB (Hyper SQL Database) is a relational database management system written in Java. It has a JDBC driver and supports a large subset of SQL-92 and SQL:2008 standards.[2] It offers a fast,[3] small (around 1300 kilobytes in version 2.2) database engine which offers both in-memory and disk-based tables. Both embedded and server modes are available for purchase.
Additionally, it includes tools such as a minimal web server, command line and GUI management tools (can be run as applets), and a number of demonstration examples. It can run on Java runtimes from version 1.1 upwards, including free Java runtimes such as Kaffe.
HSQLDB is available under a BSD license. It is used as a database and persistence engine in many open source software projects, such as OpenOffice Base, LibreOffice Base, and the Standalone Roller Demo,[4] as well as in commercial products, such as Mathematica and InstallAnywhere (starting with version 8.0).[5]

Posted in Database Technologies | Tagged , , | Leave a comment

A Comparative Analysis of Hadoop Players

For Hadoop 2.2, let’s have a look at major players in the Hadoop ecosystem:  Hortonworks, Cloudera and MapR.

Hortonworks

Hortonworks announced in June the general availability of their Hortonworks Data Platform (HDP). The HDP distro is 100% Apache open source code. The major difference from Cloudera and MapR is that HDP usesApache Ambari for cluster management and monitoring. In its current 0.9 version, Ambari certainly can’t be so mature as Cloudera’s Manager or MapR’s Heatmap. The Hortonworks Data Platform is open source to its core  – no proprietary layers. You’ll therefore never have a vendor lock-in. Lately, HDP is migrated to latest Hadoop 2.0 codebase.

Microsoft, Teradata announced that they partnered up with Hortonworks.

Cloudera

They were the first on the market with their Cloudera Distribution including Apache Hadoop (CDH). This helped them to acquire valuable experience and to establish a solid customer base. Besides the core Hadoop plattform (HDFS, MapReduce, Hadoop Commons), CDH integrates 10 open source projects including HBase, Mahout, Pig, ZooKeeper, and others. Cloudera offers CDH, which is 100% open source, as a free download as well as a free edition of their mature Cloudera Manager console for administering and managing Hadoop clusters of up to 50 nodes. The enterprise version on the other hand combines CDH and a more sophisticated Manager plus an enterprise support package.

Recently, Cloudera inked two significant relationships. IBM announced that besides their own Hadoop distribution, BigInsights will run the CDH distro. This was closely followed by partnering with HP.

MapR

The major differences to CDH and HDP is that MapR uses their proprietary file system MapR-FS instead of HDFS. The reason for their Unix-based file system is that MapR considers HDFS as a single point of failure. The current version (v2.0) of their product is based on Apache Hadoop 0.20.2 and is known as M3 and M5. The fundamental difference between the free community edition M3 and the enterprise edition M5, is the extra high-availability features. There is MapR 2.o Beta available which I suppose will be built on Hadoop 2.0.

The company announced two prominent partnerships in June: Firstly, both editions (M3 and M5) have been selected in addition to Amazon’s own version of Hadoop (version 0.20.205) on their Elastic MapReduce service. Secondly, MapR is now available on Google Compute Engine.

A list of key players offering Hadoop platform (in alphabetical order):

Amazon Web Services, Bigtop, Cloudera, Cloudspace, Datameer, Data Mine Lab, Datasalt, DataStax, Debian, Greenplum, A Division of EMC, Hortonworks, HStreaming, IBM, Impetus, Intel, Karmasphere, Mahout, MapR Technologies, Nutch, NGDATA, Pentaho, Pervasive Software, Platform Computing, Sematext International, Talend, Think Big Analytics, Tresata, VMware, Serengeti, WANdisco,

Conclusion

The aforementioned companies stand above the rest at the moment. Although they all offer an Hadoop platform there are slight differences between the distributions in terms of included projects and versions. Hortonworks relies on stable, fully tested and 100% open source products. Cloudera focuses on innovation (or better technology) to drive growth. MapR is taking a different path than the other two with it’s largely proprietary Hadoop distribution. MapR’s sophisticated architecture is getting some leverage as shown by the two partnerships with Amazon and Google recently. At the end it’s all down to what you need from each distribution, as all offer something different.

Posted in Cloud Computing, Database Technologies, Emerging Trends, General, Open Source | Tagged , , , , , , , | Leave a comment

What Is Hadoop?

The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

The project includes these modules:

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

Other Hadoop-related projects at Apache include:

  • Ambari™: A web-based tool for provisioning, managing, and monitoring Apache Hadoop clusters which includes support for Hadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig and Sqoop. Ambari also provides a dashboard for viewing cluster health such as heatmaps and ability to view MapReduce, Pig and Hive applications visually alongwith features to diagnose their performance characteristics in a user-friendly manner.
  • Avro™: A data serialization system.
  • Cassandra™: A scalable multi-master database with no single points of failure.
  • Chukwa™: A data collection system for managing large distributed systems.
  • HBase™: A scalable, distributed database that supports structured data storage for large tables.
  • Hive™: A data warehouse infrastructure that provides data summarization and ad hoc querying.
  • Mahout™: A Scalable machine learning and data mining library.
  • Pig™: A high-level data-flow language and execution framework for parallel computation.
  • Spark™: A fast and general compute engine for Hadoop data. Spark provides a simple and expressive programming model that supports a wide range of applications, including ETL, machine learning, stream processing, and graph computation.
  • ZooKeeper™: A high-performance coordination service for distributed applications.
Posted in Database Technologies, Emerging Trends, Open Source | Tagged , , | Leave a comment

Big Data

Without doubt, “big data” is the hottest topic in enterprise IT since cloud computing came to prominence five years ago. And the most concrete technology behind the big data trend is Hadoop.

Most enterprises are at least experimenting with Hadoop, and the potential for transformative business improvement is real.

Big data analytics is an over-hyped, poorly-defined and over-used term.  Despite that, and despite the challenges outlined above, I believe that for many businesses, the opportunities presented by the big data revolution are as significant and fundamental as those presented by e-commerce 15 years ago.  Companies (particularly retailers) should be bold and determined in reacting to these challenges.

Posted in Cloud Computing, Database Technologies, Emerging Trends | Tagged , | Leave a comment

Oracle Database License price with OEM

Product Named-User License Processor License
Oracle Database Server
Standard Edition One $180 $5,800
Standard Edition $350 $17,500
Enterprise Edition: $950 $47,500
    – Real Application Clusters (RAC) $460 $23,000
    – Active Data Guard $120 $5,800
    – Partitioning $230 $11,500
    – OLAP $460 $23,000
    – Data Mining $460 $23,000
    – Spatial $230 $11,500
    – Advanced Security $230 $11,500
    – Label Security $230 $11,500

Oracle License price in US $ (per User, per CPU/CORE) + 15-20% support cost per year.

SummaryIts good to follow ‘per user licensing’ if you ve got =< 50 users. Go by ‘per Core’ if  no of users > 50

For OEM, The following packs are required.

Product Named-User License Processor License
Diagnostics Pack $70 $3,500
Tuning Pack  $70 $3,500

Summary: It may be good to buy OEM for few users as not many would be using it

Posted in Oracle | Tagged , , | Leave a comment

Oracle Database 12c : Deprecated and Desupported Features

Oracle Database Changes

Oracle Database 12c introduces changes that affect Oracle Database in general.

This section contains these topics:

Posted in Database Technologies, Oracle | Tagged , , , | Leave a comment

Windows Azure SQL Database (formerly SQL Azure)

Windows Azure SQL Database (formerly SQL Azure, SQL Server Data Services, and later SQL Services) is a cloud-based service from Microsoft offering data-storage capabilities (similar to Amazon Relational Database Service) as a part of the Azure Services Platform.

Unlike similar cloud-based databases, SQL Azure allows users to make relational queries against stored data, which can either be structured or semi-structured, or even unstructured documents. SQL Azure features querying data, search, data analysis and data synchronization.
SQL Azure uses a special version of Microsoft SQL Server as its backend.

It provides high availability by storing multiple copies of databases, elastic scale and rapid provisioning.

It exposes a subset of the full SQL Server functionality, including only a subset of the data types — including string, numeric, date and boolean.

It uses an XML-based format for data transfer. Like Microsoft SQL Server, SQL Azure uses T-SQL as the query language and Tabular Data Stream (TDS) as the protocol to access the service over internet. (The product does not provide a REST-based API to access the service over HTTP- Microsoft recommends using ADO.NET Data Services for this purpose.)

Posted in Database Technologies | Tagged , , , , | Leave a comment

AMM vs ASSM : Oracle Auto Memory Management

When you have large SGA sizes you can get considerable benefits from using HugePages. Automatic Memory Management ( AMM) and HugePages on Linux are not compatible, which means AMM is probably not a sensible option for any large systems.

Instead, Automatic Shared Memory Management and Automatic PGA Management should be used as they are compatible with HugePages.
Even so, AMM is the default for all ASM instances and should be left that way. From a database perspective, it still may be relevant for smaller, less important databases.

  • HugePages:

For large SGA sizes, HugePages can give substantial benefits in virtual memory management. Without HugePages, the memory of the SGA is divided into 4K pages, which have to be managed by the Linux kernel. Using HugePages, the page size is increased to 2MB (configurable to 1G if supported by the hardware)

Posted in Database Technologies, Oracle | Tagged , , , | Leave a comment

SQLite

SQLite is a relational database management system contained in a C programming library. In contrast to other database management systems, SQLite is not a separate process that is accessed from the client application, but an integral part of it.
SQLite is ACID-compliant and implements most of the SQL standard, using a dynamically and weakly typed SQL syntax that does not guarantee the domain integrity.
SQLite is a popular choice as embedded database for local/client storage in application software such as web browsers. It is arguably the most widely deployed database engine, as it is used today by several widespread browsers, operating systems, and embedded systems, among others.[5] SQLite has many bindings to programming languages.

For FAQ on SQLite, Check out:- http://sqlite.org/faq.html

Posted in General | Tagged , , , | Leave a comment

Why SOAP?

Why SOAP?
Here are a few reasons you may want to use SOAP.

WS-Security
While SOAP supports SSL (just like REST) it also supports WS-Security which adds some enterprise security features. Supports identity through intermediaries, not just point to point (SSL). It also provides a standard implementation of data integrity and data privacy. Calling it “Enterprise” isn’t to say it’s more secure, it simply supports some security tools that typical internet services have no need for, in fact they are really only needed in a few “enterprise” scenarios.

WS-AtomicTransaction
Need ACID Transactions over a service, you’re going to need SOAP. While REST supports transactions, it isn’t as comprehensive and isn’t ACID compliant. Fortunately ACID transactions almost never make sense over the internet. REST is limited by HTTP itself which can’t provide two-phase commit across distributed transactional resources, but SOAP can. Internet apps generally don’t need this level of transactional reliability, enterprise apps sometimes do.

WS-ReliableMessaging
Rest doesn’t have a standard messaging system and expects clients to deal with communication failures by retrying. SOAP has successful/retry logic built in and provides end-to-end reliability even through SOAP intermediaries.

Summary
In Summary, SOAP is clearly useful, and important. For instance, if I was writing an iPhone application to interface with my bank I would definitely need to use SOAP. All three features above are required for banking transactions. For example, if I was transferring money from one account to the other, I would need to be certain that it completed. Retrying it could be catastrophic if it succeed the first time, but the response failed.

Posted in General | Leave a comment

SOAP vs REST

Both methods are used by many of the large players. It’s a matter of preference. My preference is REST because it’s simpler to use and understand.

SOAP (Simple Object Access Protocol):

  • SOAP builds an XML protocol on top of HTTP or sometimes TCP/IP.
  • SOAP describes functions, and types of data.
  • SOAP is a successor of XML-RPC and is very similar, but describes a standard way to communicate.
  • Several programming languages have native support for SOAP, you typically feed it a web service URL and you can call its web service functions without the need of specific code.
  • Binary data that is sent must be encoded first into a format such as base64 encoded.
  • Has several protocols and technologies relating to it: WSDL, XSDs, SOAP, WS-Addressing

REST (Representational state transfer):

  • REST need not be over HTTP but most of my points below will have an HTTP bias.
  • REST is very lightweight, it says wait a minute, we don’t need all of this complexity that SOAP created.
  • Typically uses normal HTTP methods instead of a big XML format describing everything. For example to obtain a resource you use HTTP GET, to put a resource on the server you use HTTP PUT. To delete a resource on the server you use HTTP DELETE.
  • REST is a very simple in that it uses HTTP GET, POST and PUT methods to update resources on the server.
  • REST typically is best used with Resource Oriented Architecture (ROA). In this mode of thinking everything is a resource, and you would operate on these resources.
  • As long as your programming language has an HTTP library, and most do, you can consume a REST HTTP protocol very easily.
  • Binary data or binary resources can simply be delivered upon their request.

There are endless debates on REST vs SOAP on google.

Posted in General | Leave a comment

I wish if i could measure happiness like temperature.

Can we measure happiness like we measure weather/body temperature, blood pressure, sugar level etc scientifically? Some time, i feel, nothing is more important than being happy. This happiness or satisfaction quotient will be a score which one can show off. Those with high happiness score will be considered highly successful in life. People will not scramble for money, power etc.

While thinking of this type of score. Few more parameters hit my mind like:
Knowledge quotient/SCORE
STRESS quotient/SCORE

GOD created sent us (living beings) on earth with an mandate to be happy, healthy, be in good mood and spread beauty, laughter and happiness.
Those who perform well they are rewarded with health, wealth, love, knowledge, wisdom.
Those who don’t, they are taken out of field or they just shrink or perish.

Reference article:
http://plato.stanford.edu/entries/happiness/#HapMea

Posted in General | Leave a comment

What is NoSQL (Not Only SQL)?

NoSQL database, also called Not Only SQL, is an approach to data management and database design that’s useful for very large sets of distributed data.

NoSQL, which encompasses a wide range of technologies and architectures, seeks to solve the scalability and big data performance issues that relational databases weren’t designed to address. NoSQL is especially useful when an enterprise needs to access and analyze massive amounts of unstructured data or data that’s stored remotely on multiple virtual servers in the cloud. .

Contrary to misconceptions caused by its name, NoSQL does not prohibit structured query language (SQL). While it’s true that some NoSQL systems are entirely non-relational, others simply avoid selected relational functionality such as fixed table schemas and join operations. For example, instead of using tables, a NoSQL database might organize data into objects, key/value pairs or tuples.

Arguably, the most popular NoSQL database is Apache Cassandra. Cassandra, which was once Facebook’s proprietary database, was released as open source in 2008. Other NoSQL implementations include SimpleDB, Google BigTable, Apache Hadoop, MapReduce, MemcacheDB, and Voldemort. Companies that use NoSQL include NetFlix, LinkedIn andTwitter.

NoSQL is often mentioned in conjunction with other big data tools such as massive parallel processing, columnar-based databases and Database-as-a-Service (DaaS)

Posted in General | Leave a comment

Jenkins: is a Java-based framework for a automated build process

Jenkins is a Java-based framework for a continuous build process like CruiseControl. It includes, but is not limited to, plugins for email notification, Ant, and various source control tools. A web interface is provided to view the details of the current and previous builds. It allows one to perform a continuous integration of any software development process.

Jenkins, previously known as Hudson, is an open source continuous integration tool written inJava. The project renamed itself after a dispute with Oracle, which claims the right to trademark the Hudson name and has applied for such a trademark as of December 2010.[2] Complicating matters, Oracle has decided to continue development under the Hudson name, creating two parallel versions each considering the other a fork.

Jenkins provides continuous integration services for software development, primarily in the Java programming language. It is a server-based system running in a servlet container such as Apache Tomcat. It supports SCM tools including CVS, Subversion, Git, Mercurial andClearcase, and can execute Apache Ant and Apache Maven based projects as well as arbitrary shell scripts and Windows batch commands. The primary developer of Jenkins is Kohsuke Kawaguchi.[3] Released under the MIT License, Jenkins is free software.[4]

Builds can be started by various means, including being triggered by commit in a version control system, scheduling via a cron-like mechanism, building when other builds have completed, and by requesting a specific build URL.

Posted in General | Leave a comment

Database as a Service – Pros & Cons

I was thinking of researching & writing something on this article for a long time. One of the key reasons which compelled me to write & research abt it was that i have heard lot about clod computing, software as service (SAAS) etc but very little heard or seen abt ‘Database as a Service’.
Couple of key question I wanted to research and get answered for those reading this post are:
Posted in Cloud Computing, Database Technologies, Emerging Trends | Tagged , , , , , , , , , , , , | 1 Comment

Ways to Deal with Difficult People

Difficult people are a prime cause of job stress among workers. If unattended, this stress causes negative physiological, psychological, and social reactions in individuals. There are a number of ways to deal with difficult people to keep them from getting the better of you including:

  • Looking at things objectively, not personally.
  • Focusing on the issue, not the feelings.
  • Reinforcing yourself with supportive colleagues.
  • Communicating your frustrations to someone who is not involved, and
  • Using “I will” and “Will you” phrases.
Posted in Random Thoughts | Tagged , , , , , , , , , | Leave a comment