Dec 16, 2014

Why create adaptive & response OR why think mobile OR why we create mobile app - Hidden benefit

Lot of has been discussed in last few years on the need of a mobile app for companies. I too work in an organization that deals with customers in digital channels. And we realized not only customers want an mobile app but also adaptive & response site also. Our customers get an online website which is adaptive and response; and a mobile app. Not to mention that we need make site or mobile make adaptive and responsive. But we don't know how much, since there is not limit to user experience and pleasure we can keep on improving.

There was a time when mobile sites were made, but with "Adaptive & Responsive" designs mobile sites became irrelevant, instead a need came to make same desktop site more adaptive and responsive, which means measure the device size and make some adjustments in screen layout & data and provide best suitable user experience. Since device size can be anything like till 5" its smartphone, between 5" & 7" its phablet, and 7" to 10" is tablet, and beyond is laptop or desktop. But these are assumptions we are making and we need not to worry about them, because of latest technologies.

But Question now is Do we need a mobile app over an "Adaptive & Response" UI?
I believe today yes, but don't know about tomorrow.  2014 saw huge number of amazing smartphones. Some are masterpiece. A mobile app gives user convenience of clicking and starting the application, rather than going into browser and typing address. Even if the URL is bookmarked, its better to sit in the home screen of smartphone.
Cost of making a mobile app is much cheaper compared to making whole site adaptive and response.

Indeed we need both. Yes, because we don't read customer's mind always. Same customer can hit website or use a mobile app. But definitely it will be a kill to not provide both options and expect customer to use our Online site using desktop.

It is mentioned on "http://en.webself.net/why-create-a-website.ws"-
"Creating a website is a powerful communication tool. 
A website is a unique way to communicate with the world! Whether you choose to create a website to share your passion for musique, get people to know your business, sell products or any other reason, there are no boundries to what you can do! With a website, a ton of possibilities are open to you!"

But we have moved a lot and you should trust everyone when everyone is saying we need mobile app, we need adaptive & response UI, along with a normal website.

2015
2014 also saw many smartwatch launches. Now this is a challenge. How a mobile app or site will behave on smartwatch. But I think customers will not open website in smartwatch (no matter how much adaptive or responsive it is). And apps will be needed. Highly adaptive, and optimized apps. Not same one as mobile apps. But a more effective and efficient in terms of layout and data.
We got a challenge. But solution is same as we did previously when we were designing mobile apps or while designing adaptive & response UI.  Read more below...

Why create adaptive & response OR why think mobile OR why we create mobile app - Hidden benefit
Yes, there was an hidden benefit. The motivation and limitations of mobile made us think of what all is redundant in our web sites. We decided on what customer really wants. We prioritized the features and our offerings on website, and we displayed in mobile app or mobile UI in same way.
When we thought of mobiles and other smart devices we started to adjust our online website or we created new UI's so that only relevant data is shown. We were working on low memory and low screen sizes and that increased our imagination.  Result was better customer experience and more customer interactions, because now everyone has smartphone and they are not hesitant to contact us using smartphones.

In my experience I also found some mobile apps to be much better than counter part web sites. And these are some of the most popular online companies.
I am putting some examples below how a mobile app is better in displaying the same information than online website, and these are some I visit multiple times a day -
GMail (lets forget Inbox for some time), NBA, G+, Adsense.
On mobile I immediatly get notifications of new mails. I want to check only scores and highlights from NBA (not blogs, pic, etc.). Posts of G+ look much better in mobile. And on adsense i only want my earning report for day or month, etc. In Adsense web site its hard to find earnings for the day (not exactly hard)
(I also rarely use facebook, CNN, Soundcloud, etc. from desktop)




May be after we create website, and then when we create mobile app or Make site adaptive to mobile devices and we will find what all supplementary information and space we gave.
Now lets look at the mobile apps of above -







Share:

Nov 29, 2014

JSF vs RESTofWorld

I believe Java developers long enjoyed quick learning and developing curve of JSF, and developed presentation layer.
No doubt development using JSF was fast. Because same Jave EE resources can be reused, tools were available, and everything was standard. From 2005 to 2010, JSF saw huge success adn was preferred technology for developing presentation layer. But with increasing popularity of smart devices like smartphones and tablets; demand started for more and more adaptive & responsive UI. And this is where we have HTML5 with Javascript frameworks like AngularJS to meet demands of high standard UI's, devices & their sizes. 2010 on-wards suddenly we started seeing attractive UI, and some UI's are so attractive that they will encourage you to buy something, like "http://www.nixon.com/", "http://greygoose.com/", etc. You can view these sites on your mobile, tablet, or on desktop and you will have superb experience. No doubt they are not developed in JSF. Not only retail but banking sites also becoming more Spectacular. I work for a bank, and we replaced complete presentation layer developed in JSF with new HTML5+CSS+backboneJS+etc. technology stack.

Java EE is still used but for developing Business layer, and communication between business layer and UI happens via RESTful services, which have gained huge success in past few years.

Smartphones also increased demand for creating mobile applications, which was cheaper compared to making existing online site adaptive & responsive. But a company will never get rid of online site, and looking at what nixon, greygoose, and others have done. Its best to have both - "a mobile app" and "adaptive & response UI" in 2014 and 2015. But things will change in 2015 on-wards, when wearable technologies will have bigger market share. Smartwatches will become popular, and we will need to cater customers using Smartwatches or Google Glass. Its a new world.

Bottom line is you are designing now, you should take extreme precaution while deciding on using JSF. If you are going to use JSF, then you should have distant vision and reason behind using it.
Indeed latest designs i see today are more like below -

A common proverb in India is "BHED-CHAL(All following blindly others footsteps)", 1 year back Angular.js has 20% market share of javascript frameworks, but now I think it might be 80%, may be because of Google support.
Similar thing happened for JSF, its market share is shrinking and many don't want to use without any valid reason.
And most of the designers running away from JSF are those who used JSF 1.x, and probably they didn't had time to understand JSF 2.2.
I believe I will still use JSF because of multiple reason (faster development and gentle debugging), but I need a best of best JSF implementation. And I see one is Prime Faces (http://www.primefaces.org/).

Share:

Nov 27, 2014

Sarnath - Buddham saranam gacchami - I go to the Buddha for refuge

Sarnath is small town located in Varanasi.
So, if you are visiting Varanasi, you can also plan visiting Sarnath.
Its not exactly in city, but its almost touching city.
Sarnath is very famous among people following Buddhism,
since Gautam Budha came to this place to give his first preach and tought Dharma for first time after getting enlightenment.

Its a small deer park in sarnath, where Buddha preached 5 monks, called Isipatana.
Isipatana is mentioned by the Buddha as one of the four places of pilgrimage which his devout followers should visit
(Source - "http://www.palikanon.com/english/pali_names/i_/isipatana.htm")
While staying at Isipatana, Budha taught several suttas including Dhammacakkappavattana  Sutta.

A trip to sarnath includes getting to know more about buddhism. Not to mention it is place visited by all budhists.
But, if you are not budhist, you will have interest in
- Dhamek Stupa
- Ashok Pillar
- Museum
- Budhist temples build by different countries like Japanese, Thai, Myanmar, Japenese, etc.
- Ruins of ancient Buddhist monasteries.

When you reach sarnath, you should have museum on your right and Ticket counter on your left side of road, from you will buy tickets to visit
Dhamek Stupa and also museum.
museum is on one side of road, which also has the Ashok Pillar inside.
Other side is gate to enter to visit Dhamek Stupa, around Dhamek stupa are ruins of ancient budhist monastries, and also Deer Park.
Now above was the must, and optionally other temples can be visited by walking around. All are walking distance.

Note - Please avoid going in summer and prefer visiting in between November to February.
Also don't visit on weekends or holidays.

Below are some maps that will help guide your itinerary.




In below map you can see Museum and on the opposite of road is Dhamek Stupa. There are small gates on opposite side of roads to enter museum and Anciet site. Entry to main temple is from another gate. You will have to come back on road and walk to entrance of Main temple. Around 100 meters from Main temple on the road is UP Tourism hotel called "Rahi Tourist Bungalow", a nice and affordable place to stay.









Below is the museum from outside.


Dhamek Stupa -



 Main temple of sarnath -




Trees you see below are called Ashok trees









Share:

Oct 22, 2014

Online Banking: New features

With increasing number in mobile banking use (also in online banking), customers are looking for ease along with security.
And mobile wallet is probably future.

Essentially a digital container running on a mobile device, a mobile wallet is designed to aggregate and manage mobile commerce services, supporting payment cards, tickets, loyalty cards, receipts, vouchers and other items that might be found in a conventional wallet (or purse).

Wallet revolution failed so far, until Apple Pay. On 21st Oct, Bloomingdale, Foot locker, Toys R Us started accepting Apple Pay. Apple’s partnership with Visa, MasterCard, and American Express boosts the customer’s trust and legitimacy. Few months back Standard Chartered launched mobile wallet Philippines. M-pesa is available to Vodafone customers in many countries, and similar is Pingit by Barclays to UK customers.

Banks focusing on Online Banking and mobile banking should provide mobile wallet to their customers, because according to survey -

So, Every Bank should launch mobile wallet asap, if not done yet. 

Still many banks want to upgrade their online banking features and looking for what new can be done. 
I have found some features are very unique to some bank and which are rare but interesting and attractive. 
Online banking provides common features like balance check, fund transfer, direct debit, payment, etc. And recently many have added graphs for better visualizations. 

With tablets  taking over market, online application lives. A adaptive and responsive UI will work and attract more customers to login to online banking. But I believe we can build a powerful Online Banking application and over that we build small apps. Customer should have option to install optional mobile apps and also customer should be able to customize online banking application and make it simple.

But if still you are looking for more innovative ideas for online banking, or looking for what new can be done to attract more customers to online banking, or give overall online banking experience an amazing one to your customers, then below is my list of top ten features which can be added to online banking - 

10. Let user set background image
Description: cid:image001.png@01CFEDFF.8DE433A0
(Source - SalemFive Bank)

9. Intelligent Calculator, not like below but smart, along with other tools.
Description: cid:image002.png@01CFEDFF.F4FD5440


8. Allow to upload pictures of beneficiaries.

And display them accordingly in movement list.

7. Integrate CloudIt and other cloud features with banking app



6. Robust search -
Search for transactions using natural language (for example, "Starbucks purchases under $10")”
(Source: logixbanking.com)

5. Graphs for goals -

(Source - mint.com)

4. More categorization, like 102$ payment is 100$ payment and 2$ fee.

(Source: Mint.com)

3. A UI as simple as Simple.com
As we add more graphs and features, we have to keep it simple. And that is tough.

2. A tool, a message as attractive as below -



1.      Virtual Wallet integrated with Calendar
Share:

Oct 19, 2014

Still using EJB's: Is EJB dead - Not Yet

EJB - Server side components to hold business logic with lot server provided capabilities.

EJB evolution - 

EJB 1.0 was released in 1998. EJB 1 had basic component features like RMI, deployment descriptor, Security, transaction, along with bean types: Stateful session beans, Stateless session beans, and Entity beans. Session beans hold business logic. Stateless session bean is request scoped, where as Stateful session bean holds conversational state. Entity beans were not just POJO. Entity beans were coarse-grain object(bean) with functionality, data, and dependent objects. Creating Entity bean means fulfill following -
Create remote interface for bean, create home interface for bean, define primary key, implement remote interface methods, implement EntityBean interface and its methods, methods that match home interface methods, deployment descriptor. This was tough.

EJB 2.0 introduced local interfaces and message driven beans. CMP beans were extended with capability to define relationships (CMR). Multiple entity beans were allowed to have relationship.

EJB 2.1 added web service and timer service support. MDBs and EJB-QL were enhanced.

EJB 2.1 and earlier required deployment descriptor.
EJB 2.1 & earlier required two minimum interfaces - home & remote.

EJB 3.0(2006) was giant leap which excluded the need for deployment descriptor, home & remote interfaces, introduced annotations, EJB's are now POJO and expose POJI, Interceptors, and new persistence model JPA 1.0 to supersede Entity bean components.

EJB 3.1 further simplified EJBs and added new features; No-interface view, .war packaging, Singleton session beans, application initialization & shutdown events, timer enhancements, and @Asynchronous in session beans.
Subset EJB 3.1 lite excluded features - remote interfaces, RMI-IIOP interoperability, JAX-WS endpoint, persistent timers, and message driven beans.

The current EJB's have complete capabilities to write server side layer with business logic, transactional, secure, and persistence.

EBJ is used as a business layer in a 3 tier architecture. We can almost everything using EJB and design complete application/business layer using EJB's only.
All we need to know, how easy is to develop a EJB layer, that can process any request of presentation layer. Because EJB is just like any other java class with some annotations. But since it is an EJB, container does lot behind the scene, which we take for granted like -
  • Concurrent EJB access by multiple clients in thread safe manner.
  • Scalable layer with load balancing & clustering.
  • Provide JNDI for lookup
  • Dependency Injection
  • Transaction management
  • Message handling using MDB's
  • Scheduling using Timers
  • Interceptor service
  • Web service support
  • Security


3-tier architecture -

Stateful session bean had bad reputation since its inception and was rarely used. Stateless session bean was the most commonly used EJB. Clients (like servlet) call the Session Bean (stateless) generally remotely and session bean interacts with entities (or entity beans of 2.1 or earlier). Session bean responds back to client. Session bean provided remote & local interfaces. In case a asynchronous call was required, a common approach is to use JMS, send message over queue, and use MDB (Message driven bean) to handle message and respond back asynchronously. So Session bean and MDB's act as facade which manage entities and hold business logic.

A call between Servlet and EJB (session bean) might be remote or local.
We can have several session beans implementing business logic. Each session bean encapsulating a business case, and interaction between session beans is always possible. A session bean can call other session beans and involve one or more entities, all these can be done in single transaction or in multiple transactions based on how we configure. Best part of using EJB's is how container manages transactions.
Transactions involving different resources like (Database, JMS destination, IBM MQ, etc.) can be merged into one so if rollback happens it is done on all resources.

I was working on a project of stock market - middle office in 2009 where we used EJB 3.0 + JPA.
We decided on using UI JSF as presentation, EJB for business layer and any ORM solution.
We went for Oracle, and used ADF for presentation layer and EJB and Toplink as ORM. The development was damn fast and complete middle office was developed in 6 months.
User actions on ADF (UI) are mapped to EJB (session bean) methods, Managed beans (ADF backing beans) are mapped to entities, and its done.
Drag and drop components from pallette, double click action buttons to map to EJB methods, map backing bean to entities, set cache settings in Toplink, and its done. Project is ready.
Possibly you can check below tutorial -
http://docs.oracle.com/cd/E18941_01/tutorials/jdtut_11r2_51/jdtut_11r2_51_1.html
But JSF's are dead already, above design is old and most probably no longer will be used.

Downfall of EJB and Rise of Spring - 

Coming back to EJB's, why EJB's got bad reputation was because of two reasons -
1. Over complicated EJB 2.1 & previous versions
2. Better option - Spring framework in 2004.

Some nicely engineered features of Spring like APO, Inversion Of Control, MVC framework, and integration with Hibernate - changed the complete design of Java EE software's.
Declarative transactions can be applied to any POJO and can be deployed in Tomcat.
Spring+Hibernate ruled the Java EE software architecture from 2005 to 2010 and is still most popular framework.

Reinvention of EJB - 

EJB was reinvented with EJB 3.0, which included annotations, Dependency Injection, and POJO's.
EJB+JPA couldn't replace Spring+Hibernate because EJB & JPA are specification left for vendors (IBM, Oracle, BEA) to implement. But EJB was limited to few types of beans and annotations, compared to full fledged framework Spring. The power of Sping was in beans and its modules like Spring Webflow, Spring MVC, etc. In Spring it was easy to create layer's of beans, inject beans into one another, define scope of beans (session, request, singleton, prototype, etc.), integration with EL, etc. We can create a layer of Controllers beans, layer of Service beans, layer of Business objects, etc. And inject one layer beans into another using DI which means ability to choose at deployment time which implementation to use.

CDI - 
CDI (Context Dependency Injection) was introduced in Java EE 6 and below was mentioned on Oracle site for Java EE -
"Contexts and Dependency Injection (CDI) for the Java EE platform is one of several Java EE 6 features that help to knit together the web tier and the transactional tier of the Java EE platform. CDI is a set of services that, used together, make it easy for developers to use enterprise beans along with JavaServer Faces technology in web applications. Designed for use with stateful objects, CDI also has many broader uses, allowing developers a great deal of flexibility to integrate various kinds of components in a loosely coupled but typesafe way.
The most fundamental services provided by CDI are as follows:
Contexts: The ability to bind the lifecycle and interactions of stateful components to well-defined but extensible lifecycle contexts
Dependency injection: The ability to inject components into an application in a typesafe way, including the ability to choose at deployment time which implementation of a particular interface to inject
In addition, CDI provides the following services:

  • Integration with the Expression Language (EL), which allows any component to be used directly within a JavaServer Faces page or a JavaServer Pages page
  • The ability to decorate injected components
  • The ability to associate interceptors with components using typesafe interceptor bindings
  • An event-notification model
  • A web conversation scope in addition to the three standard scopes (request, session, and application) defined by the Java Servlet specification
  • A complete Service Provider Interface (SPI) that allows third-party frameworks to integrate cleanly in the Java EE 6 environment "
CDI's are so impressive that many feel that CDI is replacement of EJB. 

More about CDI can be read on Oracle websites, but for sure most of the things done using EJB or Spring are possible doing with CDI. But CDI should not be thought as replacement of EJB since because features like timers, asynchronous, declarative transactions, monitoring, and pooling are only available to EJBs. In future CDI might include all aspects currently available in EJB 3.1, but for now a Java EE design will have EJB as a layer with CDI's injected. 

One more major reason of still using EJB's is that  -
"Although an EntityManager injection works also for CDI maanged beans, the beans cannot be directly exposed to the UI layer. 
The EntityManager in a stateless environment can be configured only with the 
@PersistenceContext(type=PersistenceContextType.TRANSACTION) annotation, which is also the default value. Every interaction with the EntityManager requires, therefore, an active transaction; otherwise a javax.persistence.TransactionRequiredException is thrown. Transactions cannot be started in CDI managed beans - out of the box. An EJB solves the problem elegantly, because neither manual transaction management nor realization of CDI extensions is required to start a transaction. A single, no-interface view bean, such as a facade, manages the transactions without any further configuration, frameworks, or manual coding" - Stateless Session bean.
Above is the extract from "Real World Java EE Patterns" book by Adam Bien
And thus our current Java EE design (suitable for all Java EE softwares) will be -
EJB 3.1 + CDI + JPA








Share:

Sep 4, 2014

Chat Application using Java EE 7 - Web Sockets

Use Case - 

Users can join a public Chat room. Users can ask questions and Agent will answer the questions.

High Level Design - 

  • A WebSocketEndPoint which receives & responds to Client (/User) messages. It allows new client to join and maintains list of active users. 
  • Agent is an EnterpriseBean with business logic and answer to all questions. 
  • User will send JSON. Decoders will convert them to JoinMessage or ChatMessage and pass them to WebSocketEndpoint. 
  • EnterpriseBean will call WebSocketEndPoint's sendAll method to send answer to Users. Answer will be a ChatMessage. Encoders will convert the ChatMessage into JSON, before actually passing to Clients. 
  • We have named WebSocketEndPoint class as BotEndPoint, EnterpriseBean as BotBean. 


Design Consideration & Classes -
1. CDI Bean "BotBean" holds business logic and has answer to all question.
2. BotEndPoint (Web socket end point class) allows user to join and receives questions from User. BotEndPoint maintains list of active users. BotEndPoint informs all users if any new user joins, any new question is asked by user, and sends answers to all users.
3. Four different types of Message: ChatMessage, InfoMessage, JoinMessage, and UserMessage. Four type of messages BotEndPoint can send to users. These messages should be converted to JSON, before passing to client. So we have four Encoders to convert one type of message into JSON.
4. Users can send a JoinMessage (to join chat room) or ChatMessage (to ask question). Indeed users will send JSON and Decoders - JoinMessageDecoder, ChatMessageDecoder will convert the JSON into either JoinMessage or ChatMessage correspondingly.
5. BotEndPoint will invoke BotBean to handle the user question. BotBean uses BotEndPoint's sendAll method to send answer to users.
6. User sends a question and BotEndPoint invokes BotBean to prepare answer, and later BotBean invokes BoTEndPoint to send answer to users. But if all this is done in single thread, then user will be blocked for sending second message, until he or she receives respond of first message.
Handling of message by BotBean should be done in separate thread. Indeed we should create pool of BotBean to further imporve performace.

Flow Chart - 

Design - 

More discussion on the design along with code can be found on Oracle site - Java EE 7 tutorial.
http://docs.oracle.com/javaee/7/tutorial/doc/websocket012.htm#BABCDBBC

Share:

Common symbols for Java EE Design

My past few posts are on Java / Java EE designs. In which I have to create a design of solution of some use cases, using Java/JavaEE technologies. Generally I am mostly using UML symbols, but UML has versions and many symbols. Along with UML symbols we can use some more symbols. Some of the common symbols and which I prefer are below -


Share:

Sep 1, 2014

Periodic data updates to Web Clients

Using Java EE7 - Web Sockets

We have several ways to publish periodic data updates from server to client. Data updates like Stock price update, or Account available balance, or Next auction time, etc. might be decided by business logic on server and might be need to propagated to Web clients to display. If server application not itself generates such data, it might be receiving from some other source, and it needs to pass to web clients, because Web clients might now know when data is available.

One way is to pass the Event to client and one way is to provide update on Web Socket.

A sample design using Web Socket can be like -



Below is the sample code, which is there on Oracle site.
WebSocketEndpoint is a java class whose code is very simple like below -

And JavaScript code on Web Client is like below -

Share:

Real Time Stock Market Data Processing - Design

Use case - Processing real time stock market data like quote & trade.  Generally Stock market publish the updates, intra-day live data, via API's, which an application can listen and publish to its clients.

Flow - Steps 
1. Connect to Stock Exchange server and register for Events (trade, quote. depth).
2. On receiving event, validate event, log event, and pass it on to Handler.
3. Handler knows EVENT_TYPE and handles events appropriately.
4. Handler converts events into domain objects, which are usable by the Business layer or other clients.
5. Business layer generates Reports/Metrics and might make decisions on investment. Business layer might not understand the event, so it is required to map the events into domain objects which are more understood by the higher layers.
6. Domain objects might be distributed to other applications or clients. Other clients may desire objects in their required format, like XML, EDI, etc.

Design Considerations - 

  • MBeans should be created & registered on application startup. MBeans are used for monitoring, like - Memory Consumption, Statistics, Reprocessing and event, Re-sending an message (/domain object) to a client. 
  • We might receive thousands of thousands of events in a day, so we can't process events sequentially. We should maintain pool of handlers. 
  • Events should be logged into Database with event stage. Event stage is optional but it should be different from the EVENT_TYPE & EVENT_STATUS which we receive in the Event. 
  • User details for Stock Exchange Server can be maintained in properties file. 
  • Different Event types can have different structure. 
  • Events should be placed in Queue, before passing to Handler. OR if Java Thread Pool is used, which comes with a blocking queue, where tasks are placed before actually getting handled by a thread. 
  • Events should be validated, possibly for checksum, to ignore duplicate events. 
Flowchart - 



 Detailed Design - 




Share:

Aug 26, 2014

Writing first eBook - MS Word formatting tips


When I was first writing my eBook, I was not new to MS Word. But later I found its a very powerful and only tool to write eBook with so ease. After completing my book, I started searching for how to format the word document so that it fits as an eBook and is ready to publish. Hell lot of search results and plenty of pdf's that's the result, if you search anything in google. Because Internet is plethora of everything, you want to find something you use Google, but even after that, you need your brain to filter and that still requires time: to at least go through all the top results and decide on one. Many sites like smashwords have a guide, but mine is very small, and that's what help you, because most of the formatting tips you might be already taking.

Note - These are basic formatting tips, to give you a start.

1. Don't decide early on font size of Title, Sub-title, Heading, Sub-heading, instead look tabs as shown in below picture and use them -
Now if you want to add heading, you write in normal text, then select the text and click the tab.
Its general notion, Heading1 is the Chapter heading, and Heading2 is some heading inside a chapter (i.e. Heading1), and so one.
Like for example -


And later I will change the fonts, like below -

Change Topic1 & Topic2 to Heading2, and finally -

2. Contents or "Table of Contents", like shown below is generated -
Based on the heading1 & heading2 we wrote previously we want to generate Contents, if will be done in the same document. Go to the top of the document, i.e. where you want the contents (Table of Content).
In 2007 we go to References -> Table of Contents.
And Table of Contents generated will be like below -
And time I add new Chapter or topic, I will have to update the Contents, and that's done by a click -

3. Add Page Numbers -

4. Avoid "Space" key from keyboard. Instead use Indent

5. Want page break - like for example every chapter should begin in new page. Do not use "Enter" key, instead use "Page Break" -

6. Control spaces between lines. This happens like for example below -
What is want is, Different between Line1 & Line2 should 0. Difference between Line3 & Line4 should more than difference between Line3 & Line2. Possibly final outcome like below -
I want 0 difference between Line1 & Line 2. Select both lines and click on "Line &Page break" -
then select the spacing -

7. If you are inserting images, take caution. Do not unnecessary insert images, where intended message can be displayed using simple texts.  Because of different dimension of devices, its really hard to predict image will be view-able or perceived similarly on all devices.

8. Download Calibre(http://calibre-ebook.com/). Its easy to test in Calibre. Upload your doc file, convert it into epub format and view. try to resize the simulator to test - how eBook will look on different devices of different sizes & dimensions.
Note - Some platforms expect epub format some expect mobi format. Smashwords uses epub, Amazon (Kindle) uses mobi.

9. Publishing on Kindle is easier than you have ever imagined. After you are done with basic formatting tips given above. You can directly publish on Kindle. I have tested this.  
Share:
© Technology Strategy Architecture and Development | All rights reserved.
Blogger Template Crafted by pipdig