Hazem Saleh's Blog, page 3
August 9, 2015
Creating Cordova jQuery Mobile Apps Rapidly
Cordova jQuery npm plugin allows you to add jQuery mobile’s ready-made templates to your existing Apache Cordova app using a neat easy-to-use CLI.
You can install Cordova jQuery npm plugin using the following npm command:
npm install -g cordova-jquery
Once you install it, you can start using it by executing cordova-jquery command from your Apache Cordova app’s root directory. The next six videos shows you how to create six Cordova jQuery mobile apps with different templates (Multipages, Header Navigation Bar, Persistent Navigation Bar, External Panel, Accordion, and ListView).
As shown in the videos below, after executing cordova-jquery command, all what you need to do is to choose the template you would like to apply to your existing Cordova app. All of the examples below work on Apache Cordova version 5.1.1 (The latest Cordova release until the moment).
Cordova jQuery plugin supports the following templates.
Multiple Pages
This template will apply a simple two page jQuery mobile template to your index.html file.
Header Navbar
This template will apply a three page jQuery mobile template to your index.html file that includes a header navbar for the header on each page.
Persistent Navbar
This template will apply a three page jQuery mobile template to your index.html file that includes a persistent navbar for the footer on each page.
External Panel
This template will apply an external panel to jQuery mobile. When this option is selected you will also be prompted for additional information such as which side of the page you’d like the panel to open on (left, right) and which reveal style would you like (reveal, push, overlay)
Accordion
This template will apply three sections’ jQuery mobile accordion template to your index.html file. Your existing content will be placed as part of the first section. It is important to note that you have to make sure that your existing content parent element does not use CSS “absolute” position in order to be controlled by the accordion section.
List View
This template will apply a jQuery mobile list view template to your index.html file. The first item of the list view points to your existing content page, and the second and the third items of the list view point to two placeholder pages.
The main objective of this plugin is to facilitate the usage of the jQuery Mobile in Apache Cordova, so feel free to use it and submit any issues you are facing to:
https://github.com/Open-I-Beam/cordova-jquery-npm/issues
Related Plugin Videos:
July 29, 2015
My Talk about Automated Jasmine 2.x tests in GeeCON
Finally, my Talk about Automated Jasmine 2.x tests in GeeCON Poland is now published, I hope that you will find it useful.
July 8, 2015
DZone MVB (Most Valuable Blogger)
Today, I’m really glad and honored to be selected as a DZone MVB (Most Valuable Blogger). DZone’s MVB program brings together a group of highly talented bloggers, authors, and technologists actively writing about topics of interest to the developer community. These people are recognized in the industry for their contributions and deep technical knowledge on subjects ranging from software design and architecture to programming on a range of platforms including Java, .NET, Ruby and others.
One of my main passion areas is generally speaking, writing, and sharing my experience and ideas with people. This is why I find writing books and blogging an interesting activity. I think writing (and speaking) is a great way to communicate and exchange our ideas (as a part of the WW community) with each others, and it is a wonderful way to enhance our experiences.
When I began writing, My main aim was (and still) sharing my experience with the WW community in order to help people rapidly resolving problems that are similar to the problems that I face during my daily job, and also in order to learn from the community if they have better solutions.
I hope that, if you do not have your own technical blog yet, to start creating your own one and share your technical experience because it will be definitely useful to at least someone in somewhere in this world.
July 4, 2015
[JavaScript Quiz #15] All possible compositions of a number
Today’s JavaScript quiz is about finding all the possible compositions of a number. For example if we have a number 4, we would like to find all the possible compositions that sums up to 4 as follows.
1111
112
121
13
211
22
31
4
.
.
.
.
.
.
.
.
.
.
.
.
.
In order to develop this utility, it is important to understand its nature. For a number n, it has the following possible compositions:
n (for a composition length of 1)
1 n-1 (for a composition length of 2)
1 1 n-2 (for a composition of length 3)
…
1 1 1 … 1 (for a composition of length n)
This can be handled using recursive function as follows.
function compositions(n, temp, output) {
var i, newTemp;
if (n == 0) {
output.push(temp);
} else {
for (i = 1; i
As shown, the base is if n is equal to 0 then we add the temp string (which is initialized to "") to the output list, else we subtract i from n and adds i to the temp string. The following function getAllCompositions calls compositions with the initial values.
function getAllCompositions(n) {
var out = [];
compositions(n, "", out);
return out;
}
Finally, we can test getAllCompositions as follows.
// Test ...
var num = 4;
var out = getAllCompositions(num), i;
console.log("Compositions number for (" + num + ") = " + out.length);
for (i = 0; i < out.length; ++i) {
console.log(out[i]);
}
The output will be:
Compositions number for (4) = 8
1111
112
121
13
211
22
31
4
If you have a better solution, feel free to put in the comments below. The current solution complexity is n!.
[JavaScript Quiz #15] All possible subsets of a number
Today’s JavaScript quiz is about finding all the possible subsets of a number. For example if we have a number 4, we would like to find all the possible subsets that sums up to 4 as follows.
1111
112
121
13
211
22
31
4
.
.
.
.
.
.
.
.
.
.
.
.
.
In order to develop this utility, it is important to understand its nature. For a number n, it has the following possible subsets:
n (for a subset length of 1)
1 n-1 (for a subset length of 2)
1 1 n-2 (for a subset of length 3)
…
1 1 1 … 1 (for a subset of length n)
This can be handled using recursive backtracking as follows.
function subsets(n, temp, output) {
var i, newTemp;
if (n == 0) {
output.push(temp);
} else {
for (i = 1; i
As shown, the base is if n is equal to 0 then we add the temp string (which is initialized to 0) to the output list, else we subtract i from n and adds i to the temp string. The following function getAllSubsets calls subsets with the initial values.
function getAllSubsets(n) {
var out = [];
subsets(n, "", out);
return out;
}
Finally, we can test getAllSubsets as follows.
// Test ...
var num = 4;
var out = getAllSubsets(num), i;
console.log("Subsets number for (" + num + ") = " + out.length);
for (i = 0; i < out.length; ++i) {
console.log(out[i]);
}
The output will be:
Subsets number for (4) = 8
1111
112
121
13
211
22
31
4
If you have a better solution, feel free to put in the comments below. The current solution complexity is n!.
May 11, 2015
[JavaScript Quiz #14] Number Text Representation
Today’s JavaScript quiz is about creating a Number to String utility. Assume that we have the following numbers as an input to our utility:
23
1999
199999
1000000999
Our JavaScript utility should output the following results:
twenty three
one thousand nine hundreds ninety nine
one hundred ninety nine thousand nine hundred ninety nine
one billion nine hundred ninety nine
.
.
.
.
.
.
.
.
.
.
.
.
.
In order to develop this utility, it is important to break-down this problem into small sub-problems and then solve each of them individually. For example, if we wish to print numbers from 0 to 9, this is an easy Job, just create an array that contains the numbers from 0 to 9 and call it digits as follows.
digits = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
If we want to print numbers from 10 to 19, we can create another array that represents teens as follows:
teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
Then if we want to print numbers from 20 up to 99, we can create another array that represents tys as follows.
tys = ["twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"];
But for numbers from 20 to 99, how can we utilize the previous array for printing their values, if we think little about it, we will find that a number like 39 is about 30 9 which will produce at the end "thirty nine". But how to divide a number like 39 to 30 9 and get its corresponding text representation, simply this can be done by performing three steps:
Dividing 39 (or generally numbers from 20 to 99) by 10 (Integer Division), and then subtract 2 from the result number in order to pick its text representation "thirty" from its corresponding array (tys array).
Having the mod of 39 (or generally numbers from 20 to 99) and 10 which will give us 9, and then we can get simply pick its text representation "nine" from its corresponding array (digits array).
Finally, augment the two text representations to get the final number text representation which is “thirty nine”.
For numbers from 100 up to 999, For example: 205, we can divide it 205 by 100 to know how many hundred units does it has (2 hundreds) and then have the reminder of this number 205 with 100 which is 5 and “five” representation can be got simply using the previous mentioned procedures. Let’s look into the code which can get the text representation of numbers from 0 to 999.
NumberReader.prototype.readThreeDigitNumber = function(number) { /* 0 ... 999 */
if (number == 0) {
return "zero";
}
var output = "", result, reminder;
if (number > 99) {
result = Math.floor(number / 100);
number = number % 100;
output = this.digits[result] " hundred";
if (number == 0) {
return output;
}
}
if (number < 10) {
output = NumberReader.appendToOutput(output, this.digits[number]);
} else if (number < 20) {
output = NumberReader.appendToOutput(output, this.teens[number - 10]);
} else {
result = Math.floor(number / 10);
reminder = number % 10;
output = NumberReader.appendToOutput(output, this.tys[result - 2]);
if (reminder > 0) {
output = NumberReader.appendToOutput(output, this.digits[reminder]);
}
}
return output;
}
We can apply the same concept with thousands by diving them by 1000 to know the thousands units and having mod with 1000 which can be resolved using the previous procedure. Thankfully, we can apply the same concept with millions and billions as shown below.
NumberReader.prototype.readNumber = function (number) {
var output = "", result, reminder;
if (number >= 1e9) {
result = Math.floor(number / 1000000000);
reminder = number % 1000000000;
output = this.readNumber(result) " billion " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1e6 && number < 1e9) {
result = Math.floor(number / 1000000);
reminder = number % 1000000;
output = this.readNumber(result) " million " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1000 && number < 1e6) {
result = Math.floor(number / 1000);
reminder = number % 1000;
output = this.readNumber(result) " thousand " ((reminder > 0) ? this.readNumber(reminder) : "");
} else {
output = this.readThreeDigitNumber(number);
}
return output;
}
The complete quiz code is shown below.
var NumberReader = function() {
this.digits = ["zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine"];
this.teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
this.tys = ["twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"];
}
NumberReader.prototype.readThreeDigitNumber = function(number) { /* 0 ... 999 */
if (number == 0) {
return "zero";
}
var output = "", result, reminder;
if (number > 99) {
result = Math.floor(number / 100);
number = number % 100;
output = this.digits[result] " hundred";
if (number == 0) {
return output;
}
}
if (number < 10) {
output = NumberReader.appendToOutput(output, this.digits[number]);
} else if (number < 20) {
output = NumberReader.appendToOutput(output, this.teens[number - 10]);
} else {
result = Math.floor(number / 10);
reminder = number % 10;
output = NumberReader.appendToOutput(output, this.tys[result - 2]);
if (reminder > 0) {
output = NumberReader.appendToOutput(output, this.digits[reminder]);
}
}
return output;
}
NumberReader.prototype.readNumber = function (number) {
var output = "", result, reminder;
if (number >= 1e9) {
result = Math.floor(number / 1000000000);
reminder = number % 1000000000;
output = this.readNumber(result) " billion " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1e6 && number < 1e9) {
result = Math.floor(number / 1000000);
reminder = number % 1000000;
output = this.readNumber(result) " million " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1000 && number < 1e6) {
result = Math.floor(number / 1000);
reminder = number % 1000;
output = this.readNumber(result) " thousand " ((reminder > 0) ? this.readNumber(reminder) : "");
} else {
output = this.readThreeDigitNumber(number);
}
return output;
}
NumberReader.appendToOutput = function (output, parameter) {
if (output == "") {
output = parameter;
} else {
output = " " parameter;
}
return output;
}
And this is a test code for NumberReader.
// Test our API ...
var numberReader = new NumberReader();
console.log(numberReader.readNumber(1999999999));
console.log(numberReader.readNumber(1000000999));
console.log(numberReader.readNumber(100000999));
console.log(numberReader.readNumber(1000999));
console.log(numberReader.readNumber(199999));
console.log(numberReader.readNumber(100000));
console.log(numberReader.readNumber(1999));
console.log(numberReader.readNumber(9));
console.log(numberReader.readNumber(999));
console.log(numberReader.readNumber(193));
console.log(numberReader.readNumber(23));
console.log(numberReader.readNumber(333));
The output will be:
one million nine hundred ninety nine
one hundred ninety nine thousand nine hundred ninety nine
one hundred thousand
one thousand nine hundred ninety nine
nine
nine hundred ninety nine
one hundred ninety three
twenty three
three hundred thirty three
[JavaScript Quiz] Number Text Representation
Today’s JavaScript quiz is about creating a Number to String utility. Assume that we have the following numbers as an input to our utility:
23
1999
199999
1000000999
Our JavaScript utility should output the following results:
twenty three
one thousand nine hundreds ninety nine
one hundred ninety nine thousand nine hundred ninety nine
one billion nine hundred ninety nine
.
.
.
.
.
.
.
.
.
.
.
.
.
In order to develop this utility, it is important to break-down this problem into small sub-problems and then solve each of them individually. For example, if we wish to print numbers from 0 to 9, this is an easy Job, just create an array that contains the numbers from 0 to 9 and call it digits as follows.
digits = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
If we want to print numbers from 10 to 19, we can create another array that represents teens as follows:
teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
Then if we want to print numbers from 20 up to 99, we can create another array that represents tys as follows.
tys = ["twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"];
But for numbers from 20 to 99, how can we utilize the previous array for printing their values, if we think little about it, we will find that a number like 39 is about 30 9 which will produce at the end "thirty nine". But how to divide a number like 39 to 30 9 and get its corresponding text representation, simply this can be done by performing three steps:
Dividing 39 (or generally numbers from 20 to 99) by 10 (Integer Division), and then subtract 2 from the result number in order to pick its text representation "thirty" from its corresponding array (tys array).
Having the mod of 39 (or generally numbers from 20 to 99) and 10 which will give us 9, and then we can get simply pick its text representation "nine" from its corresponding array (digits array).
Finally, augment the two text representations to get the final number text representation which is “thirty nine”.
For numbers from 100 up to 999, For example: 205, we can divide it 205 by 100 to know how many hundred units does it has (2 hundreds) and then have the reminder of this number 205 with 100 which is 5 and “five” representation can be got simply using the previous mentioned procedures. Let’s look into the code which can get the text representation of numbers from 0 to 999.
NumberReader.prototype.readThreeDigitNumber = function(number) { /* 0 ... 999 */
if (number == 0) {
return "zero";
}
var output = "", result, reminder;
if (number > 99) {
result = Math.floor(number / 100);
number = number % 100;
output = this.digits[result] " hundred";
if (number == 0) {
return output;
}
}
if (number < 10) {
output = NumberReader.appendToOutput(output, this.digits[number]);
} else if (number < 20) {
output = NumberReader.appendToOutput(output, this.teens[number - 10]);
} else {
result = Math.floor(number / 10);
reminder = number % 10;
output = NumberReader.appendToOutput(output, this.tys[result - 2]);
if (reminder > 0) {
output = NumberReader.appendToOutput(output, this.digits[reminder]);
}
}
return output;
}
We can apply the same concept with thousands by diving them by 1000 to know the thousands units and having mod with 1000 which can be resolved using the previous procedure. Thankfully, we can apply the same concept with millions and billions as shown below.
NumberReader.prototype.readNumber = function (number) {
var output = "", result, reminder;
if (number >= 1e9) {
result = Math.floor(number / 1000000000);
reminder = number % 1000000000;
output = this.readNumber(result) " billion " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1e6 && number < 1e9) {
result = Math.floor(number / 1000000);
reminder = number % 1000000;
output = this.readNumber(result) " million " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1000 && number < 1e6) {
result = Math.floor(number / 1000);
reminder = number % 1000;
output = this.readNumber(result) " thousand " ((reminder > 0) ? this.readNumber(reminder) : "");
} else {
output = this.readThreeDigitNumber(number);
}
return output;
}
The complete quiz code is shown below.
var NumberReader = function() {
this.digits = ["zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine"];
this.teens = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
this.tys = ["twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"];
}
NumberReader.prototype.readThreeDigitNumber = function(number) { /* 0 ... 999 */
if (number == 0) {
return "zero";
}
var output = "", result, reminder;
if (number > 99) {
result = Math.floor(number / 100);
number = number % 100;
output = this.digits[result] " hundred";
if (number == 0) {
return output;
}
}
if (number < 10) {
output = NumberReader.appendToOutput(output, this.digits[number]);
} else if (number < 20) {
output = NumberReader.appendToOutput(output, this.teens[number - 10]);
} else {
result = Math.floor(number / 10);
reminder = number % 10;
output = NumberReader.appendToOutput(output, this.tys[result - 2]);
if (reminder > 0) {
output = NumberReader.appendToOutput(output, this.digits[reminder]);
}
}
return output;
}
NumberReader.prototype.readNumber = function (number) {
var output = "", result, reminder;
if (number >= 1e9) {
result = Math.floor(number / 1000000000);
reminder = number % 1000000000;
output = this.readNumber(result) " billion " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1e6 && number < 1e9) {
result = Math.floor(number / 1000000);
reminder = number % 1000000;
output = this.readNumber(result) " million " ((reminder > 0) ? this.readNumber(reminder) : "");
} else if (number >= 1000 && number < 1e6) {
result = Math.floor(number / 1000);
reminder = number % 1000;
output = this.readNumber(result) " thousand " ((reminder > 0) ? this.readNumber(reminder) : "");
} else {
output = this.readThreeDigitNumber(number);
}
return output;
}
NumberReader.appendToOutput = function (output, parameter) {
if (output == "") {
output = parameter;
} else {
output = " " parameter;
}
return output;
}
And this is a test code for NumberReader.
// Test our API ...
var numberReader = new NumberReader();
console.log(numberReader.readNumber(1999999999));
console.log(numberReader.readNumber(1000000999));
console.log(numberReader.readNumber(100000999));
console.log(numberReader.readNumber(1000999));
console.log(numberReader.readNumber(199999));
console.log(numberReader.readNumber(100000));
console.log(numberReader.readNumber(1999));
console.log(numberReader.readNumber(9));
console.log(numberReader.readNumber(999));
console.log(numberReader.readNumber(193));
console.log(numberReader.readNumber(23));
console.log(numberReader.readNumber(333));
The output will be:
one million nine hundred ninety nine
one hundred ninety nine thousand nine hundred ninety nine
one hundred thousand
one thousand nine hundred ninety nine
nine
nine hundred ninety nine
one hundred ninety three
twenty three
three hundred thirty three
April 25, 2015
[JavaScript Quiz #13] Finding longest common substring of strings
Finding the longest common substring of strings is one of the interesting problems. Assume that we have two JavaScript strings like “ababccd” and “abccw”, Can we write a JavaScript utility function that can find the common substrings of these two strings which is “abcc” in this case.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
One of the possible solutions to this problem is to create a 2D comparison array (of size [First string length][Second string length]) which will hold the comparisons between every character in the first and the second strings. If the character of the first string does not match the second string character then set the array cell to 0.
If we find the first string current character matches the second string current character then set the corresponding array cell to 1 but take care if the upper left diagonal cell of the current cell in the comparison array is greater than 0 then you need set the current cell value to the upper left diagonal cell value + 1 (Upper left diagonal cell refers to the previous character of both strings).
Coding this is very simple and the complexity of this code is O(length of the first string * length of the second string) as follows.
var StringUtils = function() {
}
StringUtils.findLongestCommonSubstring = function(string1, string2) {
var comparsions = []; //2D array for the char comparsions ...
var maxSubStrLength = 0;
var lastMaxSubStrIndex = -1, i, j, char1, char2, startIndex;
for (i = 0; i < string1.length; ++i) {
comparsions[i] = new Array();
for (j = 0; j < string2.length; ++j) {
char1 = string1.charAt(i);
char2 = string2.charAt(j);
if (char1 === char2) {
if (i > 0 && j > 0) {
comparsions[i][j] = comparsions[i - 1][j - 1] + 1;
} else {
comparsions[i][j] = 1;
}
} else {
comparsions[i][j] = 0;
}
if (comparsions[i][j] > maxSubStrLength) {
maxSubStrLength = comparsions[i][j];
lastMaxSubStrIndex = i;
}
}
}
if (maxSubStrLength > 0) {
startIndex = lastMaxSubStrIndex - maxSubStrLength + 1;
return string1.substr(startIndex, maxSubStrLength);
}
return null;
}
// Test code
console.log(StringUtils.findLongestCommonSubstring("ababccd", "abccx"));
console.log(StringUtils.findLongestCommonSubstring("ababccd", "ccxaba"));
console.log(StringUtils.findLongestCommonSubstring("becooltopeople", "topeoplebecool"));
console.log(StringUtils.findLongestCommonSubstring("ababccd", "zzzz"));
As shown in the implementation, we store two main items, the maximum common substring length and its last index and thankfully using JavaScript substr function, we can get the desired common substring string. The output will be as follows.
abcc
aba
topeople
null
Finally, note that if you have two longest substrings then this code will get the first of them.
[JavaScript Quiz] Finding longest common substring of strings
Finding the longest common substring of strings is one of the interesting problems. Assume that we have two JavaScript strings like “ababccd” and “abccw”, Can we write a JavaScript utility function that can find the common substrings of these two strings which is “abcc” in this case.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
One of the possible solutions to this problem is to create a 2D comparison array (of size [First string length][Second string length]) which will hold the comparisons between every character in the first and the second strings. If the character of the first string does not match the second string character then set the array cell to 0.
If we find the first string current character matches the second string current character then set the corresponding array cell to 1 but take care if the upper left diagonal cell of the current cell in the comparison array is greater than 0 then you need set the current cell value to the upper left diagonal cell value + 1 (Upper left diagonal cell refers to the previous character of both strings).
Coding this is very simple and the complexity of this code is O(length of the first string * length of the second string) as follows.
var StringUtils = function() {
}
StringUtils.findLongestCommonSubstring = function(string1, string2) {
var comparsions = []; //2D array for the char comparsions ...
var maxSubStrLength = 0;
var lastMaxSubStrIndex = -1, i, j, char1, char2, startIndex;
for (i = 0; i < string1.length; ++i) {
comparsions[i] = new Array();
for (j = 0; j < string2.length; ++j) {
char1 = string1.charAt(i);
char2 = string2.charAt(j);
if (char1 === char2) {
if (i > 0 && j > 0) {
comparsions[i][j] = comparsions[i - 1][j - 1] + 1;
} else {
comparsions[i][j] = 1;
}
} else {
comparsions[i][j] = 0;
}
if (comparsions[i][j] > maxSubStrLength) {
maxSubStrLength = comparsions[i][j];
lastMaxSubStrIndex = i;
}
}
}
if (maxSubStrLength > 0) {
startIndex = lastMaxSubStrIndex - maxSubStrLength + 1;
return string1.substr(startIndex, maxSubStrLength);
}
return null;
}
// Test code
console.log(StringUtils.findLongestCommonSubstring("ababccd", "abccx"));
console.log(StringUtils.findLongestCommonSubstring("ababccd", "ccxaba"));
console.log(StringUtils.findLongestCommonSubstring("becooltopeople", "topeoplebecool"));
console.log(StringUtils.findLongestCommonSubstring("ababccd", "zzzz"));
As shown in the implementation, we store two main items, the maximum common substring length and its last index and thankfully using JavaScript substr function, we can get the desired common substring string. The output will be as follows.
abcc
aba
topeople
null
Finally, note that if you have two longest substrings then this code will get the first of them.
April 24, 2015
Back from ApacheCon North America 2015
I just get back from ApacheCon North America that was be held from 13 April to 16 April @Austin, Texas, USA. The conference organization was really great and there were a lot of attendees in the conference sessions.
I had the chance to present “Apache Cordova In Action” in 13 April, the session had many attendees and I was really amazed by the energy, enthusiasm, and responsiveness of the attendees during the session.
The session went great and I was glad to give a free copy of my JavaScript Mobile Application Development book to one of the attendees who answered a JavaScript quiz at the end of my session.
I uploaded my session below:
Apache Cordova In Action from Hazem Saleh
Finally, I would like to thank all the organizers of ApacheCon conference for making the conference looks so great.