Orange Juice Tank

Month

August 2012

1 post

Apologies.

It looks like I haven’t updated this blog for a long time. Since first semester started, I didn’t have the time to write and post things. But, I sure did learn a lot both from my OJT and my subjects. A huge wave of exams and deadlines just ended and I am having the day off. I don’t have enough time though, I’ll have to wake up early for tomorrow’s class. Goodnight and good luck to us!

Prayers for everyone. -.-

Aug 12, 2012
#Apologies.

May 2012

8 posts

Welcome

Before reading the rest of the blog, please, please keep in mind that this is my first blog with Text Posts. :) I had another blog, icandoart.tumblr.com *shameless plugging here :)*, but it is a photo blog where I upload some of the snapshots I took. And, writing and expressing may thoughts are skills I wish I have.

So why Orange Juice Tank?

I am currently taking an On-the-Job-Training program here at 8Layer Technologies, and they are known for creating KahelOS, another Linux flavor. Kahel is the Tagalog translation of orange. The color orange simulates creativity, promotes optimism and broadens the mind. Here inside 8Layer’s office you can see that a lot of the stuffs are colored orange. The walls are orange, mugs are orange, tarpaulins are orange, and a lot more.

Juice Tank - Well, I just thought of more words that can go with ‘Orange’. And I came up with these two.

Orange Juice Tank *look! it forms the acronym OJT :)* means that this blog is a tank filled with orange juice. And what is this Orange Juice? We all know that saying “squeeze your creative juice” means “let those creative ideas out”. The Orange Juice are the ideas and knowledge I will learn during my stay as an intern here at 8Layer.

I am really excited, this juice will be from the best oranges, and I have a strong feeling it will taste awesome! :)

May 23, 2012
#Welcome
Chat Engine Part Four.

In every chat engines that exists, we can use emoticons to express ourselves better. This is why I was asked to figure out how to display images when key tokens our entered.

JTextPanes

For this, I used JTextPanes. JTextPanes are text components that can display stylized texts, unlike text areas that are plain text components.

Example Using JTextPanes.
String initString = "Hello World!"; 
String initStyles = "regular";
init(){
     JTextPane textPane = new JTextPane();
     StyledDocument doc = textPane.getStyledDocument();
     addStylesToDocument(doc);
     try{
          doc.insertString(doc.getLength(), initString, doc.getStyle(initStyles));
     } catch (BadLocationException ble) {
          System.err.println("Couldn't insert initial text into text pane.");
     }
}
public void addStylesToDocument(StyledDocument doc){
     Style def = StyleContext.getDefaultStyleContext(). getStyle(StyleContext.DEFAULT_STYLE);

     Style regular = doc.addStyle("regular", def);
     StyleConstants.setFontFamily(def, "SansSerif");

     Style s = doc.addStyle("italic", regular);
     StyleConstants.setItalic(s, true);

     s = doc.addStyle("bold", regular);
     StyleConstants.setBold(s, true);
}

I created a method called addStylesToDocument(). Inside this we added styles to the StyledDocument of our text pane. We first took the default style of the document and used it as a parent style to other styles we created. If we use a style as the parent style, other styles will copy its properties unless we change it.

Now, how do we display emoticons? To display emoticons, we will have to display icons instead of texts by using StyleConstants.setIcon().

 s = doc.addStyle("SmileIcon", regular); 
StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
URL imgURL = Chat.class.getResource("images/4.gif");
ImageIcon smileIcon;
if (imgURL != null) {
     smileIcon = new ImageIcon(imgURL, "smiley");
} else {
     smileIcon = null;
}
if (smileIcon != null) {
     StyleConstants.setIcon(s, smileIcon);
}

We now have a style that can display a smiley face. To apply this to our chat program, we must check every word in a message before displaying it to our text pane. If a word is equal to a ‘:)’ or a ‘:-)’ do the code below.

 try{ 
     doc.insertString(doc.getLength(), word, doc.getStyle("SmileIcon"));
} catch (BadLocationException ble) {
     System.err.println("Couldn't insert initial text into text pane.");
}

You can try for yourself and download the example I made.

May 22, 2012
#Chat Engine Part Four.
MySQL Prepared Statements in PHP.

Prepared Statements in SQL is another way to accessing a database using PHP. It is like a template that allows you to execute statements repeatedly. Using prepared statements will protect you from SQL injections. SQL injections are user attacks on a programs databases.

With prepared statements you can execute SELECT, INSERT, REPLACE, UPDATE, DELETE, and CREATE TABLE queries.

First we will have to prepare the statement. Place holders(?) are on the locations where variables will be substituted. 

$stmt = $mysqli -& gt ; prepare ( "SELECT title, author FROM books WHERE book_id = ?" ) ; 

Then, bind the parameters. We use flags to indicate the type of data expected. ‘i’ for integer, ‘s’ for string, ‘d’ for double and ‘b’ for binary data. 

$stmt->bind_param ( 'i' , $id ) ; // $stmt->bind_param ( 'si' , $name, $id ) ; *If more than two parameters are needed*

Set the value of the bind paremeters. This could be done before or after calling bind_param() but before calling execute().

$id = $book_id ; 
$stmt->execute ( ) ; 

If your query returns a value, after calling execute() the results will still be on the SQL Server. To retrieve the data, you must fetch it from the server. First call bind_results() to bind the results to variable. You can now call fetch() and the data is now on the variables you used.

$stmt->bind_result ( $title , $author ) ; 
$stmt->fetch ( ) ;
printf ( "Title: %s , Author: %s \n " , $title , $author ) ;

Finally deallocate the prepared statement.

$stmt->close ( ) ; 

Sources:

1. http://www.ultramegatech.com/2009/07/using-mysql-prepared-statements-in-php/

2. http://www.linearchat.co.uk/2011/08/why-prepared-statements-in-mysql-are-a-good-thing/

3. http://php.net/manual/en/pdo.prepared-statements.php

May 22, 2012
#MySQL Prepared Statements in PHP.
Chat Engine Part Three.

Deploying Applets

Since applets are meant to be embedded on HTML pages we must learn to deploy an applet. With netBeans this task is easy but if you want to learn more about it, this site have the step-by-step guide. NetBeans automatically creates an HTML file where the applet is embedded. You can see the file inside the build folder of your project.


Playing .WAV Files

AudioClip could be used to play sounds on applets, but because I am using JApplets I used a different approach.

To play .wav files on java applications we can use AudioPlayer from the sun.audio package. First we will have to import the following, or simply java.io* and sun.audio*.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

Then we will create an input stream containing the .wav file. With the InputStream, create an AudioStream that we will play on the AudioPlayer.

InputStream in = new FileInputStream("Music.WAV");
AudioStream as = new AudioStream(in);

Start Playing.

AudioPlayer.player.start(as);

Stop Playing.

AudioPlayer.player.stop(as);

You can download an example here.


Converting MP3 to WAV

If you downloaded the example above you’ll notice a song i included in MP3 format. If you want to play songs like this, you will have to convert it first to WAP. There are a lot of audio converters you can download for free. If you are using Linux, you could try mpg123.

First install the freeware by typing the following on the terminal.

sudo apt-get install mpg123

After the installation you can now convert MP3 to WAV.

mpg123 -w output.WAV input.mp3 
May 17, 2012
#Chat Engine Part Three.
Generating A Random Password

I am currently a part of the Hotel and Room Management System development team. Last week I made a log-in and sign-up page. So I will share to you the code I used that generates a password for first time users of the system.

In C#, I used a Random object to generate a random int which I converted to a char. This step is repeated 6 times to generate a 6 character password. Below is the C# source code.

public String generatePWord()
{
String pword = ""; int charCount = 0; Random rand = new Random(); while (charCount != 6){   int num = rand.Next(48, 123);   while ((num > 57 && num < 65) || (num > 90 && num < 97)){       num = rand.Next(48, 123); } char a = (char)(num); pword = pword + a; charCount++; } return pword; }

This time, the way I did it with PHP, was easier. PHP have the shuffle function that shuffles the order of items in an array. If you shuffled an array of all the possible characters for the passwords and take the first 6 characters, you now have your password. 

$arr = str_split('ABCDEFGHIJKLMNOPabcdefghijklmnopqrstuvwxyz0987654321');
shuffle($arr); 
$arr = array_slice($arr, 0, 6);
$password = implode('', $arr);

Above is the PHP source code. str_split() is a function that splits the given strings into arrays. array_slice() slices the array on the given index and implode() convert the array into a string.

May 14, 2012
#Generating A Random Password
Chat Engine Part Two.

Before starting to code the application sir Jasper told me to research about threads and applets. Good thing I knew a few things about these so I just refreshed what I learned before and did some exercises.

I first did some exercises on making threads. A thread will be executed and the only thing the thread does is to increment an integer. One class, named Main, will start the thread. Main class also have a button that every time it is clicked, it will get the current integer inside the thread and print it. Here’s the code.

I also tried creating an applet and as an exercise I converted the user-interface I used in my CS 145 ME into a JApplet. I created a tutorial in our wiki how I made it. Here is a copy of the tutorial and here are the source codes.

May 9, 2012
#Chat Engine Part Two.
Chat Engine Part One.

Yesterday, sir Meric and sir Jasper briefed me about the module I will be a part of. It is a chat engine that they will integrate in the 8Layer Tech. web site. It will be used as a part of their customer support. Sir Jasper and I will be authoring this project. I am really excited with this project because I know I will learn a lot. And plus, I can apply what I learned from my previous CS subjects. :)

The project must have the following:

  1. A form that will ask the users necessary information and their concerns.

  2. A reCaptcha. We do not want bots, right? :)

  3. Some kind of timer that is displayed while the client is being connected to the operator.

  4. Chat proper. The live exchange of messages between the client and the operator.

  5. Log-out and feedback. On log-out the clients will be asked to rate and comment the service or the operator.

  6. Thank you page.

It should be an applet because it will be integrated on a web site. Another required feature is the ability of an operator to redirect the client to another operator if it is available. This is useful when a client requests for an operator he prefers or when he wants to continue an interrupted conversation.

May 8, 2012
#Chat Engine Part One.
DIA Diagram Editor

Dia is a GTK-based GNU diagramming tool. You can install it by typing “sudo apt-get install dia” on the terminal. Dia can be used to create different diagrams like ERDs, UMLs, flowcharts and simple circuits.

New File

To create a new file go to File > New. And if you want to edit the properties click File > Page Setup

Components

There are two windows when you open Dia. Let us call them the Workspace and the Toolbox

Workspace

The workspace is where the diagrams are made.

Toolbox

The toolbox is where you can see all the tools and the shapes you could use.

Using Dia

Dia is really easy to use. To use a shape from the toolbox, just click on the shape and then click on the workspace as many as how many shapes you will need. You can right click on a shape to edit its properties. You can put text on most of the shapes by clicking the shape and hitting F2.

Keyboard Shortcuts File
  • New - Ctrl + N
  • Open - Ctrl + O
  • Save - Ctrl + S
  • Save As.. - Shift + Ctrl + S
  • Diagram Properties - Shift + Alt + Return
  • Print - Ctrl + P
  • Close - Ctrl + W
  • Quit - Ctrl + Q
Edit
  • Undo - Ctrl + Z
  • Redo - Shift + Ctrl + Z
  • Copy - Ctrl + C
  • Cut - Ctrl + X
  • Paste - Ctrl + V
  • Duplicate - Ctrl + D
  • Delete - Delete
  • Find - Ctrl + F
  • Find and Replace - Ctrl + H
  • Cut Text - Shift + Ctrl + X
  • Paste Text - Shift + Ctrl + V
  • Layers - Ctrl + L
View
  • Zoom In - Ctrl ++
  • Zoom Out - Ctrl +-
  • Best Fit - Ctrl + E
  • Fullscreen - F11
Objects
  • Send to Back - Shift + Ctrl + B
  • Bring to Front - Shift + Ctrl + F
  • Group - Ctrl + G
  • Ungroup - Shift + Ctrl + G
  • Parent - Ctrl + K
  • Unparent - Shift + Ctrl + K
  • Properties - alt + Return
Select
  • All - Ctrl + A
  • None - Shift + Ctrl + A
  • Inverted - Ctrl + I
  • Transitive - Ctrl + T
  • Connected - Shift + Ctrl + T
Tools
  • Modify - N
  • Edit Text - F2
  • Magnify - M
  • Scroll - S
  • Text - T
  • Box - R
  • Ellipse - E
  • Polygon - P
  • Beziergon - B
  • Line - L
  • Arc - A
  • Zigzag Line - z
  • Polyline - Y
  • Bezierline - C
  • Outline - O
  • Image - I
On the Toolbar

There is a dropdownlist on the toolbar. From their you can select the kind of diagram you are creating. Upon selecting the type of diagram you will be given the objects used on such diagrams.


Below the list of objects you can see the color picker tool. With it you can set the line color and background color of your objects.


Beside the color picker is a tool you can use to set the thickness of the borders of your objects.


Below the color picker are three buttons. With it, you can set the shape of your arrows’ head, body and tail.

On the Workspace

The workspace is initially white with grids and rulers. You can disable the grid and the rulers from the View Menu.


On the bottom part of the workspace, you could see a drop down list, where you could see the zoom percentage of your sheet.


Beside the drop down list are two toggle buttons. The first one toggles the snap-to-grid of that window and the other is to toggle the snapping of objects.


After the two buttons is a label that displays which object is focused.


Lastly, below the scroll is button that when clicked displays a small navigation window.

May 4, 2012
#DIA Diagram Editor

April 2012

7 posts

Tutorials

I was asked to put in in our wiki all I learned during my training. Below are the first tutorials sir Jasper asked me to do.

Wiki Formatting Tutorial

Download tutorial here : http://goo.gl/vxZmW

Installing Netbeans

Below are steps on how to install NetBeans on ubuntu.

  1. Download the installer from http://netbeans.org/downloads/
  2. After download, use the terminal navigate to where you placed the file.
  3. If needed, change the permissions to make the file executable.
    chmod +x filename
    
  4. You can now run the installer.
    ./filename
    
  5. Follow the steps in installation and your done. :)
Adding a Window In a Java Program

In this tutorial we will be using NetBeans.

  1. First create a java file. File > New Project > Java > Java Application. Type in the name of your project and don’t forget to create a main class. You can do this by checking the option “Create Main Class” and then supply your desired class name. Click Finish.
  2. Go to the Projects Window, Window > Projects or use Ctrl+1.
  3. Right click on the project name and create a new Frame form. New > Frame form. Type in the class name and click Finish.
    • You now have a window. The next step is to call it every time you run the main class.
  4. Go back to the your main class and type the following code in the main method.
FrameFormClass w = new FrameFormClass();
mw.setVisible(true);
  • Now you are done. If you run the program a window will appear. It might be small since we haven’t placed any component to it yet.
Making a Button Work in Java

We will first have to create a frame form. Follow the tutorial “Adding a Window In a Java Program” to create one.

  1. Now that we have a frame form, we will now add a button.
  2. On the Palette window, Window > Palette or Ctrl+Shift+8, look for the Button Component under swing controls.
  3. Click on the Button Component and place it on the frame form. Right click on the component and click Properties. From the Properties window click on the Events Tab. Look for the actionperformed property, on the drop down list select jButton1ActionPerformed.
  4. After you select jButton1ActionPerformed a method in your frame form class is created named jButton1ActionPerformed. Every time you click the button the codes in this method will execute.
  5. Try typing the code “System.out.println(“Hello World!”);” inside the jButton1ActionPerformed method. You now have a Java Program with a working button displaying “Hello World!” on every click.
Apr 30, 2012
#Tutorials
War Room

It is in the war room where me and my fellow interns stay. This picture is the view you’ll see by looking north. And below is the view at the south east direction. :)

Apr 29, 2012
#War Room
phpMyAdmin

phpMyAdmin is a free open source application made in PHP. It is used to handle the administration of MySql through the use of a web browser. Before installing phpmyadmin, we will need a web server, Apache for example, PHP, MySQL and a web browser. I installed LAMP on my machine. Now you can install phpMyAdmin.

To access phpMyAdmin, through your web browser, go to localhost/phpmyadmin. You will see a login page. Enter the credentials you supplied during the setup of your phpmyadmin.

The phpMyAdmin homepage looks like the figure above. On the right side you can see your system information. On the left sidebar their is a list of databases.

You can see on the menu bar that their is a tab labeled SQL. You can use this to type in MySQL commands such as commands for creating tables and inserting, deleting and editing data. If you do not know the syntax of MySQL, phpmyadmin’s user interface gives you the ability to do the commands easily. For example, their is a button allowing you to create a table. On click of the button, a page will ask you the properties of the tables you will create. If you are finished with creating the table, an SQL script equivalent to the actions you made is generated. this feature of phpMyAdmin is very useful. You can reuse this script on your codes that access the same database.

Apr 28, 2012
#phpMyAdmin
PHP

In PHP there are three kinds of arrays.

    1. Numeric Arrays - arrays that use numeric index

        $var[0]=”data1”; $var[1]=”data2”; $var[2]=”data3”;

    2. Associative Arrays - an array where each ID key is associated with a value.

        $region[‘Cavite’] = “4A”; $region[‘Sorsogon’] = 5;

    3. Multidimensional Arrays - array containing one or more arrays.

Most loops and functions in PHP uses the same structure as Java. They use the same key terms (while, for, if, else,) and the same rules in creating functions.

Loops:

    while(condition){

          statements…;

     }

    do{

          statements;

     }while(condition);

     for(init; cond; increment){;}

     foreach($aray as $value){;}

Decision Making:

     if(condition){;}

     if(condition){;}else{;}

     switch (n){

          case label1:

               statements;break;

          case label2:

               statements;break;

          default:

               statements;

     }

Functions:

     function myFunc($param){

          return $var;

     }

Form Handling:

     $_GET and $_POST are PHP variables used to retrieve information from HTML forms.

     <html>
          <body>
          <form action=”welcome.php” method=”post”>
               Name: <input type=”text” name=”fname” />
               Age: <input type=”text” name=”age” />
               <input type=”submit” />
          </form>
          </body>
     </html>    

The code above creates an HTML form. When the submit button is clicked the user input is sent over to the php file “welcome.php”

When we use the Get method, the data sent is seen by everyone on the URL. There is also a limit to the size of the information.

But when we use the Post method, data sent is invisible to others and has no size limit.

Welcome <?php echo $_POST[“fname”]; ?>!<br />
You are <?php echo $_POST[“age”]; ?> years old.

Data sent is placed on the arrays $_POST or $_GET. The $_REQUEST array contains all the data from the arrays $_POST, $_GET and $_COOKIES.


Date

The function date(format, timestamp) is used to format the date and time. It returns a string defined by the format parameter. The timestamp parameter provides a timestamp. If no timestamp is provided the current date and time is used.


Include and Required

You can insert the content of one php file to another by using include and require.

     1. include() generates a warning, but the script will continue execution

     2. require() generates a fatal error, and the script will stop

Opening a File

fopen() function is used to open files. The first parameter is the file being opened and the second parameter is the mode the file is to be opened.


      <?php
            $file=fopen(“welcome.txt”,”r”);
      ?>

Cookies

With PHP we can create and retrieve cookies. Cookies are often used to identify a user.

The setcookie() function is used to create a cookie. It should appear before the html tag.

Syntax: setcookie(name, user, expire, path, domain)

To retrieve the cookie we use the $_COOKIE variable.

     example. <?php echo $_COOKIE[“user”]; ?>

The example above prints the value of the cookie named “user”.

isset() function is used to check if the cookie is set.


File Upload

PHP can be used to upload files.

   <html>
      <body>
         <form action=”upload_file.php” method=”post” enctype=”multipart/form-data”>
            <label for=”file”>Filename:</label>
            <input type=”file” name=”file” id=”file” />
            <br />
            <input type=”submit” name=”submit” value=”Submit” />
         </form>
      </body>
   </html>

Given the code above, on click of the submit button information of the file uploaded is sent to upload_file.php. The information of the file is saved in the variable $_FILE.

     $_FILES[“file”][“name”] - the name of the uploaded file    

     $_FILES[“file”][“type”] - the type of the uploaded file    

     $_FILES[“file”][“size”] - the size in bytes of the uploaded file

     $_FILES[“file”][“tmp_name”] - the name of the temporary copy of the file stored on the server

     $_FILES[“file”][“error”] - the error code resulting from the file upload


Session

In PHP $_SESSION is a variable that can hold data about the user. It is open to all the pages in an application. A session is the period from the start of an application until it end.

Before storing information we must start the session using session_start(). It must appear before the html tag.

example.

     <?php

          session_start();

          $_SESSION[‘userName’];

     ?>

     <html><body>

      <?php

          echo “Welcome ” . $_SESSION[‘username’];

       ?>

     </body></html>

The unset() function is used to free the specified session variable;


Email


PHP has the mail() function that is used to send emails within the script.

Parameters: mail(to,subject,message,headers,parameters)

to - Required. Specifies the receiver / receivers of the email

subject - Required. Specifies the subject of the email. 

message - Required. Defines the message to be sent. Each line should be separated with a LF (\n). Lines should not exceed 70 characters

headers - Optional. Specifies additional headers, like From, Cc, and Bcc.The additional headers should be separated with a CRLF (\r\n)

parameters - Optional. Specifies an additional parameter to the sendmail program

Apr 23, 2012
#PHP
Day Three.

April 20, 2012

I proceeded to reading some PHP tutorials. There is this website that really helped me a lot, ever since I am studying html, css and sql.

PHP is a server side scripting language originally designed to produce dynamic web pages. PHP files contain HTML tags and PHP scripts. PHP scripts starts with “<?php” and end with “?>”. The structure of a PHP script is quite similar with java and c. The format of the loop, switch and if … else statements are the same. Also, most of the operators used are the same.

Variables in PHP always start with ‘$’. PHP is a loosely typed language therefore variable  types are not declared by the user. PHP automatically converts the variable to the correct data type.

I had a break from studying PHP when i was asked to discuss how to use phpmyadmin to my fellow interns. It was my first time to use phpmyadmin, good thing I have enough time to play around it before the discussion begun. It was also easier for me to understand how it works because I already used SQL before.

The discussion was fun, also, sir Jasper was there to share things I forgot to include and things I do not know. Open sourcing is an advocacy of 8Layer Technologies. So to practice it, sir Jasper gave us a copy of three PHP files.This files can be used to easily connect a database to a web page.

Apr 20, 2012
#Day Three.
Day Two.

April 19, 2012

I was not yet given a task. But, from what I heard, I need to study PHP! Okay, I have no idea how to use PHP.

While waiting for my task, I decided to try and study PHP on my own. The first step I did? Google it of course. Before anything else, I installed the stuffs I will need so I can practice PHP while reading tutorials about it. I followed this guide to install LAMP on my Ubuntu . Step-by-step, I followed the set-up guide and successfully made it work. 

Now, I have LAMP and I can begin with studying PHP. But every Thursday, 8Layer Tech conduct a knowledge sharing session. They call it ” Ikasa Mo Alam Mo” and every one can share their knowledge. Today all the interns must share something. So instead of studying PHP, I spent my time thinking and preparing what to share. I don’t do well in reporting so I was very nervous talking in front of these people I just met.

Before “Ikasa Mo Alam Mo” started, we, the interns, introduced ourselves by answering the questions, “Hu U?”, “Y U?”, “Where U?”, “Where where U?” and “Where will U?”. It is the 8liens way of introducing themselves.

Sir Meric started the session with his sharing about the Google Calendar. He discussed how to use it and how it was useful to him. Other interns started their training a week before I did, so they shared what they learned from the past few days. One discussed something about networks, others talked about BASH, HTML, CSS and Agile. I dig up files from the previous semesters and decided to share my  knowledge I got from CS 140. I gave a brief information about the critical section problem and synchronization and gave a demonstration of our machine project.

I learned a lot of stuffs from the knowledge sharing. Because of it, I was able to refresh my knowledge in Agile, CSS, HTML and BASH. 

Apr 19, 20121 note
#Day Two.
Day One.

April 18, 2012

On my first day, while waiting to be oriented, I had a chat with ma’am Deng, COO of the company. She gave me a gist of what I will be doing. I was assigned to be on the development department and will be mentored by sir Rey. 

I was given an orientation by sir Meric, the company CEO. He explained how 8Layer Technologies started, its vision and goals, who are the people behind it and discussed the services and products they offer.

In the afternoon, together with the other interns, KahelOS was introduced to us. KahelOS was one of the many distributions of Linux. Since its release, it had always been in the top 100 distributions of Linux. The 8liens, this is what the employees of 8Layer Tech are called, developed KahelOS. But because of the impact they made on the Linux community, they now have contributors from other parts of the world.

Apr 18, 2012
#Day One.
Next page →
2012
  • January
  • February
  • March
  • April 7
  • May 8
  • June
  • July
  • August 1
  • September
  • October
  • November
  • December