Browsing posts in: Programming

## Programming Basics Prep

Programming Basics Prep

Most of the concepts on this page is taken from : Data Structures and Algorithms in Java by Robert Lafore

This is a basic programming concept anyone must know. I will keep this page updated with new code when I have time.

### Linear Search vs Binary Search

Linear Search searches for each item in a list. For ordered,  average number of steps needed to find an item is N/2. For unordered, average number of steps needed to find an item is N.

Binary Search is like a Guess-a-number game where it checks for value in the middle and see if the number is less or more or equal to that middle number  thereby shortening the number of guesses. This can an be applied only to a sorted list.

Guess a number between 1-100 (number 33 guessed)

 Step Number Number Guessed Result Range of Possible Values 0 1-100 1 50 Too High 1-49 2 25 Too Low 26-49 3 37 Too High 26-36 4 31 Too Low 32-36 5 34 Too High 32-33 6 32 Too Low 33-33 7 33 Correct

Binary search provides a significant speed increase over a linear search. If we used linear search it would have took us 33 guesses but in binary search it only took us 7. For small number of items it is not significant but for large items binary is way more faster than linear.

### Logarithms

Comparisions needed in Binary Search

10 -> 4, 100 -> 7, 1000 -> 10, 10,000 -> 14 and so on…

 Steps s Range r Range expressed as power of 2 0 1 2^0 1 2 2^1 2 4 2^2 3 8 2^3 4 16 2^4 5 32 2^5 6 64 2^6 7 128 2^7

As we can see 7 steps cover the range of 100 (128 in total).

Doubling the range each time creates a series that’s the same as raising two to a power. We can express this power as a formula. If s represents the steps and r represents the range, the equation is

r = 2^s

(eg. 128 = 2^7)

The inverse of raising something to the power is logarithm. This equation says that the number of steps (comparisions) is equal to the logarithm to the base 2 of the range.

s = log2(r)

It is usually log to the base 10 but we can convert easily to base 2 by multiplying by 3.322

[ex. log10(100) = 2,  log1(100) = 2*3.322,  which is equal to 6.644 (approx. 7)]

### Big O Notation

Big O Notation is used to measure how efficient a computer algorithm is.

T is time, K is constant

Insertion in unordered array : T = K (Insertion requires a same amount of time no matter how big is the arrray)

Linear Search: T = K * N/2 (The number of comparisions that must be made to find a specified item is, on average, half of the total number of items) We can combine constant with 2 and the new formula is T = K*N where K is the new constant.

Big O Notation dispenses with the constant K. All we want to compare is how T change for different values of N, not what the actual numbers are.

We read O(1) as the order of 1.

Therefore we can say, Linear Search takes O(N) time and Binary Search takes O(log N) time. Insertion into unordered array takes O(1) or constant time which is ideal!

 Algorithm Running Time in Big O Linear Search O(N) Binary Search O(log N) Insertion in unordered array O(1) Insertion in ordered array O(N) Deletion in unordered array O(N) Deletion in ordered array O(N)

Time Complexity

O(1) is excellent, O(log N) is good, O(N) is fair, O(N^2) is poor. Bubble sort is O(N^2).

## Simple Sorting

### Bubble Sort

It is simplest of the sorting algorithms and very slow. You start at the left end of the list and compare the two values in index 0 and 1. If value in 0 is greater than a value in 1 then we swap the positions. If value in 0 is smaller than value in 1 we don’t do anything. We then move over one position and compare values in index 1 and index 2. We do this until all the values are sorted. As the algorithm progresses, the biggest items “bubble up” to the top end of the array. After this first pass through all the data, we’ve made N-1 comparisions and somewhere between 0 and N-1 swaps.

Now, we go back again and start another pass from left end of the array towards the right. However, we stop at N-2 because we know N-1 already contains largest number. On each external iteration/pass we decrease the size of N.

Efficiency of Bubble Sort

In general, where N is the number of items in the array, there are N-1 comparisons on the first pass, N-2 on the second and so on…

(N-1)+(N-2)+(N-3)+…+1 = N*(N-1)/2

Thus, the algorithm makes about N^2/2 comparisions as we get rid of -1 as it makes no difference. We know if data is random, a swap is necessay about half the time on average so there will be N^2/2 * 1/2 = N^2/4 swaps. We can ignore the constant 2 (or 4) thus it gives us the Big O Notation of O(N^2) which is very poor.

### Selection Sort

This sort reduces the number of swaps necessary from O(N^2) as in bubble sort to O(N). Unfortunately, the number of comparisions remains the same O(N^2).

In this type of sorting, we look for the lowest number in the list and swap it with the index 0 of the one on the left. We then start again from index 1 and look for the lowest number and swap it with the value in index 1. We continue forward until we reach the index N-1. In this algorithm the sorted numbers accumulate on the left side.

Efficiency of Selection Sort

Selection sort performs the same number of comparisions as the bubble sort N*(N-1)/2. But, it is faster because there are so few swaps. For smaller values of N, hte selection sort may in fact be much faster than bubble sort. For large values of N, the comparision times will dominate, so we would have to say that the selection sort runs in O(N^2) time just as bubble sort.

### Insertion Sort

In insertion sort, we divide the unsorted list into two and sort the list on the left (partial sorting).  Then we take the value from the start index of the second list, compare it with first list and put the number in appropriate position while shifting remaining numbers from first list to the right. We continue the process until we go through all the numbers in the second list.

Efficiency of Insertion Sort

On the first pass, it compares the maximum of 1 item. On second pass 2 and so on up to N-1

1 + 2 + 3 + … + N-1 = N*(N-1)/2

On each pass only 1/2 of the maximum number of items are actually compared before the insertion point is found, we can divide by 2. So, N*(N-1)/4

The insertion sort runs in O(N^2) time for random data and when data is almost sorted it runs at O(N).

## Stacks and Queues

Stacks and Queues are more restricted and abstract as we can only access one data at a time – either on top or on the bottom. We can use Arrays to understand the concept but we can also use Linked Lists and Heap.

### Stacks

A stack allows access to onle one data item: the last item inserted. Think of it as a stack of books on the table. You put a book on top of the stack and, you take a book from the top of the stack. Basically it is Last-In-First-Out(LIFO)Example: Stack  can be used to check whether paranthesesm, braces and brackets are balanced in a computer program. In binary trees, it can be used to traverse the nodes of a tree. In Graphs, it can be used to search the vertices of a graph. Most microprocessors use a stack based architecture. When a method is called, its return address and arguments are pushed onto a stack, and when it returns, they are popped off.

Efficiency of Stack : Constant O(1) time and is not dependent on number of items.

### Queues

It is a data structure that is somewhat like a stack, except that in a queue the first item inserted is the first item to be removed (First-In-First-Out, FIFO). Example: A queue works as a line in an apple store: first person to stand gets the first iPhone, a printer’s queue when you hit that print command and, typing things on a screen, etc.

Circular queue: when you insert an item in a queue, it sits at the back of the line. And, when you remove an item, the spot is empty at the front. You can push all the values to the front to make up that space but it is somewhat inefficient. So, we just circle through the array or spots.

Efficiency of Queues: O(1) time as we insert and remove data

### Priority Queues

This is a more specialized form of a queue. Like an ordinary queue, priority queue has a front and a rear, and items are removed from the front. However, in a priority queue, items are ordered by key value so that the item with the lowest key is always at the front. Example: Sorting of letters in order of priorities, minimum spanning trees, weighted graphs.

Efficiency of Priority Queues: Insertion runs in O(N) time as it has to sort the values first. Deletion takes O(1). We can improve insertion time using heaps.

## Arrays

Arrays are the most commonly used data structure. But, it is not always ideal. In an unordered array insert takes O(1) time but searching is slow O(N). In ordered array search is quick O(log N) but insertion takes O(N). For both, deletion takes O(N). Linked Lists is another viable option.

• Important things to understand: Insertion, Searching, Deletion
• Average number of steps needed to find and item is N/2 (worst case N)
• A deletion requires searching through an average of N/2 elements and then moving the remaining elements(N/2) to fill up the resulting hole. Total steps is N.

### Some common examples:

#### Find first non repeating char in a string

Arrays have certain disadvantages as data storage structures. In an unordered array, searching is slow, whereas in an ordered array, insertion is slow. In both, deletion is slow. Also, the size of an array can’t be changed after it’s created.

Linked Lists can replace an array as the basis for other storage structures such as stacks and queues. In fact, you can use a linked list in many cases in which you use an array, unless you need frequent random access to individual items using an index.

In a linked list, each data item is embedded in a link. A link is an object of a class Link (or something similar). Each link object contains a reference to next link in the list. A field in the list itself contains a reference to the first link. This kind of class definition is sometimes called self-referential because it contains a field (called next) of the same type as itself.

In Java, a Link object doesn’t really contain another Link object. The next field of type Link is only a reference to another link, not an object.

How Linked List differs from Array

In an array each item occupies a particular position. This position can be directly accessed using an index number.Like a row of houses – once you know the address you know the position. In a List, the only way to find a particular element is to follow along the chain of elements.

• Inserting an item at the beginning of the list
• Deleting the item at the beginning of the list
• Iterating through the list to display contents

#### Double-Ended Lists

A double-ended list is similar to an ordinary linked list, but it has one additional feature: a reference to the last link as well as to the first. The reference to the last link permits you to insert a new link directly at the end of the list as well as at the beginning. You can also do this with Linked List but you will have to traverse through the whole list and then insert it which is inefficient.

Linked List Efficiency: Insertion and deletion at the very beginning of a linked list are very fast – O(1). Finding, deleting, or inserting next to a specific item requires searching through an average of half the items in the list. This requires O(N) comparisions. An array is also O(N) for these operations but linked list is nevertheless faster because nothing needs to be moved when an item is inserted or deleted. Linked List uses exactly as much memory as it needs and can expand to fill all of available memory. The size of an array is fixed (except vector, but is still inefficient).

## Getting started with Twilio Phone Services

Today I am going to talk about how to create a simple phone application using the popular Twilio API. If you don’t know what Twilio is all about then I recommend you go through their “What is Cloud Communications” section.

Twilio

When I was working for Infofree I was given a task to come up with a basic SMS and Voice Authentication system using any available services out there. My two options back then was either Corvisa (now Shoretel) or Twilio. I tried to work with Corvisa and their API but, it lacked a lot of features that Twilio has. So ultimately, I decided to build the feature using Twilio. Sadly, because of economic reasons for my company my code was never live. But, in my free time I went further and used Twilio’s service to test different features.

In this tutorial I will show you how to setup basic twilio service using JAVA.

These are some of the things you will need in order for yor app to work.

1. Twilio Account SID `TWILIO_ACCOUNT_SID`
2. Twilio Authentication Token `TWILIO_AUTH_TOKEN`
3. Twilio Number `TWILIO_NUMBER`
4. Twilio Application SID (Optional)
5. Twilio Agent Number (Optional)

## Get API Key

Go to twilio and click on the “Get a Free API Key button”.

Get a Free API Key – Twilio

Go through the general registration process (should be easy). You need to verify using your phone number.

After you are done, go to Home-> Settings-> General

You should see your  `TWILIO_ACCOUNT_SID` and `TWILIO_AUTH_TOKEN`

## Get Phone Number

If you plan to use your number then you do not need to get `TWILIO_NUMBER` else click here and get a phone number. For trial purposes you can only use verified phone numbers.

Get a new phone number

You should see this number in your Manage Numbers section.

## Things you’ll need for JAVA

If you use maven, you need to add this dependency in your pom.xml file:

If you don’t use maven, use this jar file instead: twilio-7.x.x-with-dependencies.jar

Here I will be using a properties file (db.properties) to store all my API credentials

Once you have everything setup, we can use Twilio’s API library to do various tasks.

I also created a Phone Verification system where you could verify phone using either a SMS or a Voice Call. But because it was part of my company project, I cannot share the code with you. But here is the screenshot of how it looks like.

Phone Verification using Twilio

Following are some of the examples:

SendSMS

Click-to-Call

## Web Phone

WebPhone

Other uses are Phone Verification system, Conference Call, etc.

## Retro Gaming Machine with Recalbox in Raspberry Pi 3

This tutorial is to show you how to install recalbox 4.0.2 in a Raspberry Pi 3 and make a true retro gaming machine.

#### UPDATE: Recalbox 4.1 released – https://github.com/recalbox/recalbox-os/releases

First of all what’s better RetroPi or Recalbox?

## RetroPi vs Recalbox

Personally for me it all depends on choice and preference. Both are good in their own ways. Both run Retroarch and Emulationstation. So not much of a difference. But there are some features that  only RetroPi has and some that only Recalbox has.

Now, Let’s talk about the things you need:

Go through the compatibility list first. Very very important!!! : CLICK HERE

## Hardware

Raspberry Pi 3

I am sure you can install this in any other Raspberry Pis but I prefer Pi3 because of its power and support. You can buy it easily from Amazon : Click Here

Raspberry PI 3 Model B A1.2GHz 64-bit quad-core ARMv8 CPU, 1GB RAM

2. Raspberry Pi 2 Model B Desktop (Quad Core CPU 900 MHz, 1 GB RAM, Linux) : Click Here
3. Raspberry Pi Model B+ (B PLUS) 512MB Computer Board : Click Here
5. Raspberry Pi Zero W (Wireless) (new 2017 model) : Click Here

Raspberry Pi 3 Case

Your pi case makes this build even more interesting! Therefore, I decided to get the NES Case by Old Skool from Amazon : Click Here

NES case for Raspberry Pi 3,2 and B+ by Old Skool Tools

1. NES case for Raspberry Pi 3,2 and B+ by Old Skool Tools : Click Here
2. Super Tinytendo Case for Raspberry Pi 3, 2, Model B with Large Cooling Fan : Click Here

HeatSink

We will need some copper heatsink cooler for this setup. The case comes with airflow grill but doesn’t have a fan support.

SainSmart Copper Heatsink Heat Sink Cooler Set for Raspberry Pi RPI

1. SainSmart Copper Heatsink Heat Sink Cooler Set for Raspberry Pi RPI : Click Here

Micro SD Card or USB drive

Your Micro SD Card or USB drive must be at least 8GB in size. Recalbox recommends Sandisk Ultra series cards or drives. I got the Sandisk 128GB Ultra Series Micro SDXC Card.

Sandisk Ultra 128GB microSDXC UHS-I Card with Adapter

One important thing to remember is that it is recommended to use USB drive or stick instead of Micro SD Card because SD cards seem to get corrupted over time. But as long as you make a backup, it shouldn’t be a big deal. I suggest you get one of the following:

4. SanDisk Ultra 128GB Dual Drive m3.0 for Android Devices and Computers : Click Here
5. SanDisk Ultra 64GB Dual Drive m3.0 for Android Devices and Computers : Click Here
6. SanDisk Ultra 32GB Dual Drive m3.0 for Android Devices and Computers : Click Here
7. SanDisk Ultra 16GB Dual Drive m3.0 for Android Devices and Computers : Click Here

This one will be handy if you decide to go the MicroSD route. Honestly, for the case above, Micro SD looks so much better than USB drive as we won’t have to plug anything in the front.

[2-in-1] WEme Type-C （USB 3.1 Gen 1）Card Reader with USB-C Male & USB 3.0 Male Connecter, Support Micro SD/ TF/ SDHC/ SDXC for New MacBook, Google Chromebook Pixel, Surface Pro & SmartPhones

1. [2-in-1] WEme Type-C （USB 3.1 Gen 1）Card Reader with USB-C Male & USB 3.0 Male Connecter, Support Micro SD/ TF/ SDHC/ SDXC for New MacBook, Google Chromebook Pixel, Surface Pro & SmartPhones : Click Here

HDMI Cable

This might come with your raspberry pi. If you need one, my suggestion is you get HDMI 2.0 with gold plated one (for good conductivity) and preferably grey or white (to match with the pi case!) I recommend the following:

FLAT HDMI Cable – 6 FT (2-Pack) High Speed HDMI Cable (1.8m) Flat Wire – CL3 Rated, Supports, 4K, Ultra HD, 3D, 2160p, 1080p, Ethernet and Audio Return (Latest HDMI 2.0b Standard) White

1. FLAT HDMI Cable – 6 FT (2-Pack) High Speed HDMI Cable (1.8m) Flat Wire – CL3 Rated, Supports, 4K, Ultra HD, 3D, 2160p, 1080p, Ethernet and Audio Return (Latest HDMI 2.0b Standard) White – 6 FEET : Click Here

Power Cable

Make sure you get white one as it will match your case 🙂 I recommend one of the following:

Cable Matters 2-Pack, Gold Plated Hi-Speed USB 2.0 Type A to Micro-B Cable in White 6 Feet

1. Cable Matters 2-Pack, Gold Plated Hi-Speed USB 2.0 Type A to Micro-B Cable in White 6 Feet : Click Here
2. UGREEN Micro USB Cable Nylon Braided Fast Quick Charger Cable USB to Micro USB 2.0 Android Charging Cord for Samsung Galaxy S7/S6/S5/Edge, Note 5/4/3, LG, Nexus, HTC, Nokia, PS4 (3ft, White) : Click Here

It is recommended to use a dedicated Power Adapter instead of using your TV’s inbuilt USB port.

AUKEY USB Wall Charger, ULTRA COMPACT Dual Port 2.4A Output & Foldable Plug for iPhone iPad Samsung & Others – White

1. Quick Charge 3.0 AUKEY 6-Port USB Charger for Samsung Galaxy S8/S7/Edge, iPhone 7/7 Plus, iPad Pro/Air 2, LG G5 and More : Click Here
2. AUKEY USB Wall Charger, ULTRA COMPACT Dual Port 2.4A Output & Foldable Plug for iPhone iPad Samsung & Others – White : Click Here
3. ORICO USB Wall Charger 18W USB Charger for Power Bank, Android and iPhone devices-White : Click Here

### Extras

USB Switch – Adds simplicity to your setup. Make sure you get the usb one and NOT the micro usb one as all the switches that I’ve found is black in color. We don’t want to have a black wire running from the pi to the power outlet.

JBtek® Raspberry Pi & Arduino Male to Female USB Cable with ON / OFF Switch – Easy Start / Reboot !

1. JBtek® Raspberry Pi & Arduino Male to Female USB Cable with ON / OFF Switch – Easy Start / Reboot ! : Click Here

Bluetooth / Wired Controller – I prefer 8bitdo NES30 Pro Bluetooth Controller as it looks classic with our pi setup. But, you can also use Playstation 4 controller if you have one at home. If you decide to go with PS4 controller then we might have to tweak the code a bit.

8bitdo NES30 Pro Bluetooth Controller with Dynamic Labs Bonus Carrying Case

1. 8bitdo NES30 Pro Bluetooth Controller with Dynamic Labs Bonus Carrying Case : Click Here
2. 8bitdo FC30 Pro Controller with Bonus Carrying Case : Click Here
3. 8bitdo SNES30 Wireless Bluetooth Controller Dual Classic Joystick for IOS / Android Gamepad – PC Mac Linux : Click Here
5. DualShock 4 Wireless Controller for PlayStation 4 – Silver : Click Here
7. PlayStation 3 Dualshock 3 Wireless Controller (Classic White) : Click Here

## Software

GUI Fat32 formatter : http://www.ridgecrop.demon.co.uk/index.htm?guiformat.htm

Recalbox OS : https://github.com/recalbox/recalbox-os/releases

Recalbox Themes : https://github.com/recalbox/recalbox-themes

Win32 Disk Imager : http://sourceforge.net/projects/win32diskimager/

# RecalBox Tutorial

First, just go ahead and put everything in place in terms of setup.

### Things to do in PC

1. Unzip and/or install 7Zip, Putty, Win32 Disk Imager and GUI Fat32 Formatter.

Recalbox Files

2. Take your Micro SD card (or USB Drive) and insert into your PC.

3. Open GUI Fat32 formatter and format your MicroSD Card (or USB Drive). Make sure it formatted into FAT32 filesystem. You can check this by going into drive properties.

GUIFat32Formatter

Check Properties for FAT32

4. Unzip Recalbox 4.0.1 OS and copy it over to root of your MicroSD (or USB Drive).

Copy Recalbox to your SD Card

5. Safely eject the Micro SD Card or USB Drive from your PC.

### Things to do in Raspberry PI 3

1. Insert your Micro SD Card into Raspberry PI 3 and connect your HDMI to TV and Micro USB Cable to your power outlet. It is recommended that you use dedicated adapter instead of TV’s inbuilt USB port for power supply into your Raspberry PI.

2. Your Pi should boot into Recalbox Setup and install the OS automatically! As easy as 1-2-3!

3. After everything is done, you will enter the Emulationstation Screen where you will have some default ROMs that you can test it out. You are ready for some retro-awesomeness!!

Recalbox Main Screen

Now onto how to configuring your Bluetooth or Wired Controller

## Controller Configuration

For the initial setup I suggest you have a keyboard with you as we will need it to configure wifi and other settings. Also I highly recommend you use a Wired USB controller for initial setup. You can use USB cable if you have 8bitdo wireless controller.

Go ahead and connect your wired USB Controller (8bitdo, PS4 or XBox controller will work just fine). Once detected you will see an on-screen popup that will ask you to press and hold a key on your controller.

Controller Detected

Then just go through your controller key mapping setup process. That’s it! You can now play all the retro games.

Map Controller Keys

### Bluetooth Controller Setup

Go to the menu with wired controller or a keyboard and select Controller Settings.

A list of detected controllers will appear. Select your controller from the list pair it. That’s it! You can configure it if it’s not already a supported controller!

Bluetooth Pairing

Note: When mapping keys, the HOTKEY is a button that will activate buttons combination. For example, to get out of a game into the Emulationstation main menu screen you must press HOTKEY and START button at the same time.

## Wireless Connection Setup

You will need a keyboard for this setup.

Press Start (or go to EmulationStation’s Main Menu).

Then, go to Network Settings

Network Settings Recalbox

Make sure the Enable Wifi is set to ON

Type in your network SSID and Password and hit the back button

If your recalbox doesn’t automatically connect to wifi just go ahead and restart. Make sure you use 2.4GHz connection as the RPi3 does not support 5GHz connection.

Once connected, it should show the status as connected in Network Settings.

The latest stable verison of Recalbox OS release that you can download, as of today, is 4.0.1 but 4.0.2 update is already out. So, the first thing I would recommend you to do after wifi and controller setup is the OS update.

Go to the main menu and to the System Settings

In System Settings go to Updates

And, make sure the Auto Updates feature is set to on. Go to Start Update and follow on screen instructions. It will ask you for a system reboot. Go ahead and hit OK.

Reboot Screen

This might take couple of minutes and should update to 4.0.2.

Goto Network Settings in your Recalbox.

Network Settings Recalbox

Look for the IP Addresss. It should say something like 192.168.1.121.

Putty

In putty, under hostname type in this ip address. Make sure the port number is set to 22. Click the Open button.

Recalbox Putty SSH

You now have the root access!

## Installing Themes

In order to install themes, make sure you have the Recalbox Theme folder ready from above.

Network

Open your Network from your PC. If you can’t see Recalbox in there then you will have to go through the FTP route as in my case. I couldn’t see the share folder in there so had to use FTP Client like FileZilla.

Folder Options

Before you do that, make sure you can see all hidden files. Just go to folder options and make sure Show hidden files, folders, and drives is turned on.

FileZilla SSH FTP

Open your favorite FTP client like FileZilla and use the same credentials as above to FTP into Recalbox using SSH.

Navigate to \\recalbox\share\system\.emulationstation\themes on your network

Copy the themes you want to use on your recalbox from recalbox-themes-master/themes/ (zip file above)

Simplicity Theme

Comic Theme

And Select the theme from the UI Settings in Main Menu in Recalbox and restart your pi. That’s it!

UI Setttings

Just like installing themes, go to \\recalbox\share\

You will see a folder named ROMs and inside it you will see all the supported systems.

Just copy your game ROMs to the respective folders.

## Scraping Artwork and Game Information

Scraper

Scrape From Source

On scraper window select the scraper source(from). And start scraping! This will add beautiful artwork and game images into each games you have.

Scraping Progress

If it gives you multiple option to choose from for a game artwork, select the one that best fits the name and press A key (or any other key that selects the option).

This is just a precautionary step. Once you setup everything you might want to make a backup copy of a working OS. Just go ahead and use Win32DiskImager to create an .img backup of your SD Card / USB device.

Win32DiskImager

Give your backup a name in the Image File section and select your device from the drop down list

Click on the Read button and this should create  a backup file in your PC.

## Troubleshooting

### Audio Issues When using PS4 Controller

The PS4 controllers have an integrated audio module that prevents the broadcast of sound on your tv, or speaker. You need to blacklist audio module.

Connect in ssh via putty (follow directions above)

Mount partition :

Edit this file:

Save (Ctrl+X and Y) & reboot

## Array Splitting using PHP’s and Java’s in-built Array Funtion

Today, I am going to talk about something simple and useful in programming. For people who are professional programmers this might seem relatively easy but for someone who is trying to learn PHP or Java having a knowlege of how arrays work might be really useful. Especially when you have a large set of data and you need to display it in multiple columns.

So let’s talk about how to use PHP’s and Java’s inbuilt array funtion to slice a large array into smaller parts. For this tutorial, I am assuming you have some knowledge of how PHP and Java works. If not, there are hundreds of websites and books available to get basic understanding.

Scenario: I was given a task to list all the 52 US states in a page so that only the ones that are flagged as active in a table inside database is shown on the page. I had to show this in 3 columns.

 # State Name Active Flag 1 Alabama 1 2 Alaska 1 3 Arizona 0 4 Arkansas 1 5 … 1

Result: The result should look something like this.

 Alabama Alaska Arkansas California … Kentucky Louisiana Maine Maryland … North Dakota Ohio Oklahoma Oregon …

Now, the question might seem relatively easy. And we don’t necessarily need PHP or JAVA to solve this. We could also use something on client side like JavaScript. But, I’ll show how it’s done on the server side.

#### Query Database for Results:

We can get the list of active states from the database as follows:

For PHP you get the data as follows:

The above code connects to the database and quries the result and puts it inside the \$states[] array.

In Java, you can do the same utilizing Java’s inbuilt database connection library:

The above code puts the result inside states array. Here, getConnection() actually connects to the database. You can google and read about how to connect to database in Java to understand it much better. But, the idea is simple. We utilize Java’s SQL library to automatically connect to the database. You just define all the required connection settings in a properties file (below is just an example).

Now that we have our results in an array. Let’s see how we can split the array into three sub arrays.

#### Array Count or Length

Before we do the actual splitting, we need to know the count of the total states in the array so that we can split the array evenly across the three arrays.

To do this, in PHP we use the inbuilt function count(\$array).

In Java we simply we utilize array.length property of an array.

#### Divisible by 3

Now that we know the array length, we need to know how to evenly distribute the states into three sets of list. The logic here is to make the length (or count) of the list divisible by 3 so that we can evenly distribute the states among three sets.

The concept of modulus is very helpful here. The modulo operation (or simply modulus) finds the remainder after division of one number by another. To check if a number is divisible by 3 or not we do the following:

• First, we check to see if the number is even or odd.
• If even, we add +1 and do the modulo operand on the length. This is done as number % divisor. If this outputs a number, besides 0, then we know the number is not divisible by divisor. Here we know length or count is even as \$states_count % 2 gives us 0. If so, we loop and keep on adding 1 (\$states_count++;) until we get a number that is divisible by 3 (loop until \$states_count % 3 is not 0).
• If odd, we test and see if this odd number is divisible by 3 (\$states_count % 3 == 0). If the number is not divisible by 3 we keep adding 1 until we get a number that is divisible by 3.

In PHP

In Java

#### Split Array in 3

Now that we have an array length that is divisible by 3, we can do the following to split the array.

In PHP we will use array_slice() method to slice into three parts. The syntax for array_slice() is

array_slice(array, starting index, length);

In Java we will use Arrays.copyOfRange method to make a copy of or split an array. The syntax for copyOfRange() is

int[] newArray = Arrays.copyOfRange(array, starting index, ending index);

And there you go! That’s how you split an array. You can split into any number using the same concept. Let me know what you think or if you have an even better way.