Courses/CS 491ab/Winter 2008/Shiusen Yao
From CSWiki
[edit] Week 1 - January 4, 2008
Introduced ourselves to class. I've been throwing around the idea of creating a web application for a charity organization in my head for a while. Will work on putting together an actual design or sorts by next week. More to come.
email: 600rrism@gmail.com
[edit] Week 2 - January 11, 2008
Project Description:
- Provide means of networking donors with those in need. I envision a site where small local groups (let it be churches, schools, etc) pull their resources together to get the word out for families in need and also to provide a database for items available for donation.
Purpose (3 working):
- Provide database of families in need of support (updated by Domain Users)
- Similar to www.adaptafamily.org but with added dynamic capabilities.
- *Verifying mechanism still needs to be defined
- Provide a section for wanted volunteer work (updated by Domain Users)
- Expand to include posts from users of new ideas, etc? (updated by users)
- Provide database of items available for donation (added by Users)
- Items are kept at the donors house until it is needed (back in the gargage kind of thing)
- Saves having to pay for rental space if all items were collected
- How about items that needs to be cleared out by the owner ASAP? (dunno yet)
Platform:
- JSP w/ JSTL
Below is an example of JSP utilizing SQL JSTL tags
DB connection to the MySQL DB using JSP
<%--Connect to Database Web--%>
<sql:setDataSource
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://someurlfordatabase.net/some_database"
user="db_user"
password="db_password"
/>
The Java Database Connectivity (JDBC) API is the industry standard for database-independent connectivity between the Java programming language and a wide range of databases – SQL databases and other tabular data sources, such as spreadsheets or flat files. The JDBC API provides a call-level API for SQL-based database access
Here's an example of a database query using prepared statements to verify user login
<c:if test='${!empty param.username}'>
<sql:query var="result">
SELECT * FROM userinfo WHERE username = ? AND password = ?
<sql:param value='${param.username}' />
<sql:param value='${param.password}' />
</sql:query>
<c:if test='${result.rowCount == 1}'>
<c:set var="username" value="${param.username}" scope="session"/>
</c:if>
</c:if>
assuming row[5] is the location of the user group
<c:forEach items="${result.rowsByIndex}" var="row" varStatus="status">
<c:set var="group" value="${row[5]}" scope="session"/>
</c:forEach>
JSP Application:
- User Groups (working) - The site will have log-in capability with different privileges for different users:
- Admin
- Basically your typical admin with full functions. *futher definition necessary.
- Domain User
- User account with the ability to add/modify events
- User
- User account with the ability to post items and update status for events created by the Domain User group.
- Admin
Plans for Next Week
- Install Apache/MySQL onto my laptop
- Have a working register/log-in page working
- Further define reqts of the website
[edit] Week 3 - January 18, 2008
Last week
- Website for organizations to network to complete charitable functions
- Local/small as opposed to bigger well established
- Users not affliliated with any org can browse whats out there
This week
- Continue to expand on this idea by defining what Domains, User Groups are
- show how the website looks like today
- www.givesomehappy.com registered!
Domains
- Organizations classified as "domains"
- Domains are created and managed by Domain User accounts
- Users can join domains to be part of the group
- A user can only be the Domain User for one Domain
- A Domain can have multiple associated Domain Users
- Two main functions
- What they do
- What they need
- Schema
- Name of organization*
- Address
- Website
- phone number
- Happy meter
example: Name: clean-beach-group Address: 1234 Los Angeles st, CA, 94015 Website: N/A Phone Number: 626.123.4556 Happy Meter: ???
User Groups
- User Group Privileges
- Administrator
- Create/Modify/Delete Domains
- Modify/Delete user accounts
- Add/remove users to domains
- Modify user account privileges
- Add/remove privilege
- Activate "pending" domains
- Administrator
- Domain Manager
- Modify user account privileges
- Change Users to Domain Users (and vice versa)
- Create Domains
- Only one
- Does not need to be activated
- Activate "pending" domains
- Modify user account privileges
- Domain Manager
- Domain Supervisor
- Create Domains
- Must be Activated by Director or Administrator
- Create Domains
- Create entries in:
- Support-a-Family
- Bank o' Stuff
- Volunteer Goes Volunteering
- Domain Supervisor
- User
- User
- Schema
- First name*
- Last name*
- Username*
- password*
- email*
- phone number
- User Group
- Domain Member of
- Domain supervisor
example: First name: Sen Last name: Yao Username: 600rrism password: pass email: 600rrism@gmail.com phoneNumber: 626.123.4567 User Group: Administrator Domain Member of: givesomehappy Domain Supervisor: yes
On the Java front...
JSP Code for logging in
<c:if test='${!empty param.username}'>
<sql:query var="result">
SELECT * FROM userinfo WHERE username = ? AND password = ?
<sql:param value='${param.username}' />
<sql:param value='${param.password}' />
</sql:query>
<c:if test='${result.rowCount == 1}'>
<c:set var="username" value="${param.username}" scope="session"/>
<c:forEach items="${result.rowsByIndex}" var="row" varStatus="status">
<c:set var="user_priv" value="${row[7]}" scope="session"/>
</c:forEach>
<c:redirect url="${sessionScope.refer}" />
</c:if>
</c:if>
JSP conditional statement examples
<c:choose>
<c:when test='${empty sessionScope.username}'>
<a href="login.jsp">Login</a>
</c:when>
<c:otherwise>
<a href="index.jsp?logout=Y">Logout</a>
</c:otherwise>
</c:choose>
<a href=profile.jsp">Profile</a>
<c:if test='${sessionScope.user_priv eq "admin"}'>
<a href="controlpanel.jsp">Control Panel</a>
</c:if>
Plans for Next Week
- Fix Apache/MySQL onto my laptop
- Have a working control Panel page
- Have a working register page
- Further define website reqts
[edit] Week 4 - January 25, 2008
- Work started on www.givesomehappy.com!
- MySQL Database created "Happybase"
- Control Panel page for administrators created.
- Domain management added
- User management added
- Domain & user registration page added
- Tomcat successfully installed on laptop
- MySQL DB installed on laptop
Happybase
drop table if exists userinfo;
create table userinfo (
num integer auto_increment,
username varchar(30) UNIQUE,
password varchar(30),
fname varchar(30),
lname varchar(30),
email varchar(30),
phone varchar(30),
priv varchar(30),
display integer,
primary key(num)
);
drop table if exists domainmembers;
create table domainmembers (
num integer auto_increment,
domain varchar(30),
users varchar(30),
members varchar(30),
primary key(num)
);
drop table if exists domaininfo;
create table domaininfo (
num integer auto_increment,
domain varchar(30),
address_street varchar(30),
address_citystate varchar(30),
phonenumber varchar(30),
status varchar(30),
primary key(num)
);
drop table if exists account_types;
create table account_types (
num integer auto_increment,
type varchar(30),
primary key(num)
);
insert into account_types (type) values ('admin');
insert into account_types (type) values ('domsup');
insert into account_types (type) values ('user');
What's up for next week
- Finish domain and user pages
- continued work on Control Panel
- Start building main page
[edit] Week 5 - February 1, 2008
User interaction
Had the chance to sit down with a local church pastor to discuss what I was trying to accomplish with my website. He likes the idea very much and had thought of something similar beforehand. A second meeting has been scheduled for Feb. 16 to demo my website as well as digging into the functions of the website. I plan on sitting down with other local churches to gather more inputs and possibly have these churches begin to use this site.
At this point it seems my project has become more and more geared towards a Church network site. I think this is a great start, however I would also like to have non-religious organizations involved if possible. More status to come.
Website Development
- Changed "Domain" wording to "Organization" wording across site
- Changed buttons
- "Bank O' Stuff" and "Calendar" changed to "Donate Time" and "Donate Stuff"
- Link from index to main page removed. Index will not be main page.
- Changed Main menu option "home" to "Site Map" containing links to main areas
- Changed fonts, colors, etc
- Organization page defined:
- List of organizations on the site
- Search function (not yet implemented)
- Organization Details page defined:
- Home
- News - displays current (and a link to archive)
- "The Wall" - where members of the org can post messages
- Up-and-Coming Event - next scheduled event
- About Org
- Description
- Feedback from users of the site (Not yet implemented)
- Events
- Ability to link multiple organizations to the same event
- This means a function to allow org supervisors to join their org to the event created by another
- Volunteer Work available (Donate Time)
- Giving Opportunities available (Donate Stuff)
- Past events
- Ability to link multiple organizations to the same event
- Members
- Contact/Join Org (current link is only for Joinning)
- Home
- Functions Added
- Organization page will recognize who is logged in
- Recognizes with user is supervisor for domain
- Allow Supervisors to modify page
- Currently only modifications to "about us" work
- Upload organization icon (not yet implemented)
- Upload even pictures (not yet implemented)
- Display messages from domain to individual users? (not yet implemented)
- Organization page will recognize who is logged in
- Functions I want to add
- Quick links once user is logged in
- Flash Demo
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="200" height="250"> <param name="movie" value="./flash/clock.swf"> <param name="quality" value="high"> </object>
Problem Tracking
- Website has problems with firefox
- Bean loading problem with Tomcat 6.0
Plans for next week
- Figure out Bean problem
- Continue Org page development
[edit] Week 6 - February 8, 2008
Accomplishments
- Bean is now working.
- "The Wall" modifications
- Most current posts will now appear on top
- posts now contain time and date info
- News section now works
- Supervisors can now post and del news items
- Organization Supervisors now can create events!
- Main page now contains link to report problems
- Wiki used previously to track problems with the website
- All issues with the site will now be tracked by the site
- New flash movie created for the main page.
Up for Next week
- Continue work on events page
- 2nd meeting with local Church Pastor to discuss use of this site
[edit] Week 7 - February 15, 2008
Accomplishments
- Added "Photo" section (not yet implemented)
- Added Organization details to Organization "About" Section
- Added Julian Time functionality
- Problems with Bean loading on webserver. Seems related to Bean being compiled on Java6. Need to investigate issue.
- Members can now join specific organizations
- Organization page now properly displays members
- email/phone numbers only visible to Supervisor account
- Started work on Events page
- Organizations can now join specific events
Website now works of Julian time. All events tracked internally by the server as the number days since epoch 2000. It was orginally difficult to compare times in traditional M/D/Y format and determining what events are up next etc from code. As a result, my bean now converts all m/d/y time formats into Jday format for internal tracking.
public String geteventDate()
{
Integer num_days_since_epoch = 0;
String temp = "0";
if(this.eventDay != null && this.eventMonth != null && this.eventYear != null){
if(this.eventMonth.compareTo("Jan") == 0){
num_days_since_epoch = 0;
}
if(this.eventMonth.compareTo("Feb") == 0){
num_days_since_epoch = 31;
}
if(this.eventMonth.compareTo("Mar") == 0){
num_days_since_epoch = 59;
}
if(this.eventMonth.compareTo("Apr") == 0){
num_days_since_epoch = 90;
}
if(this.eventMonth.compareTo("May") == 0){
num_days_since_epoch = 120;
}
if(this.eventMonth.compareTo("Jun") == 0){
num_days_since_epoch = 151;
}
if(this.eventMonth.compareTo("Jul") == 0){
num_days_since_epoch = 181;
}
if(this.eventMonth.compareTo("Aug") == 0){
num_days_since_epoch = 212;
}
if(this.eventMonth.compareTo("Sep") == 0){
num_days_since_epoch = 242;
}
if(this.eventMonth.compareTo("Oct") == 0){
num_days_since_epoch = 273;
}
if(this.eventMonth.compareTo("Nov") == 0){
num_days_since_epoch = 304;
}
if(this.eventMonth.compareTo("Dec") == 0){
num_days_since_epoch = 334;
}
num_days_since_epoch = num_days_since_epoch + (Integer.valueOf(this.eventYear) - 2000)*365 + Integer.valueOf(this.eventDay);
temp = Integer.toString(num_days_since_epoch);
}
return temp;
}
The bean also retrieves Current Local Time in Julian format as well...
public String getEpochDay()
{
//start instance
Calendar timeInstance = new GregorianCalendar();
//this variable holds the complete date/time
String time = null;
Integer epoch_days = null;
Integer epoch_secs = null;
//get number of days since 1/1/2000 to (present year)
epoch_days = (timeInstance.get(Calendar.YEAR) - 2000)*365;
epoch_days = epoch_days + timeInstance.get(Calendar.DAY_OF_YEAR);
time = Integer.toString(epoch_days);
return time;
}
For Next Week
- Meeting with DalaChurch Pastor once again, but this time for a more detailed discussion. A demo of the website will also be shown. Updates next week.
- Continue work on eventpage.jsp
- Fix new bean problem
- Start working on site "about" page.
[edit] Week 8 - February 22, 2008
Meeting with Dala Church Pastor Had a meeting over the weekend with the Pastor of Dala Church along with some of his associates. The group liked what I was doing with the website are are interested in using the site. They however am requesting that the site become part of their site, instead of them joining the website as an organization. They explained that the Church is an off-conventional chruch in which one of their main objectives is to provide a network between multiple local churches (hundreds for that matter). In such a case, the website that I have been building would fit into their goals.
As a result, I may be changing "givesomehappy" to "dalachurchnet" in the coming weeks. I am scheduled again to have a sitdown with them to further integrate the site under them.
Accomplishments
- pending/suspended organizations no longer appear on org list
- admin accounts will still be able to access the organization pages.
- organization status will show up next to the org title
- page will redirect to organization list if organization parameter is manually typed in the web address bar
- So even though the organization has been removed from the org list, it is still possible to manually access the org page manually. Check has been placed in the jsp code such that org pages cannot be accessed if it does not appear on the org list
- Fixed problem where Org registration page did not have fields for email and websites.
- Fixed problem where "our members" page only returned normal users, and not supervisors.
- org supervisors can now remove other orgs from events
- org supervisors can now update org details (address, phone, etc)
- The Events Help Wanted section now works
- "Hosted by Org" now appears underneath Event Title
- Event Management added to Control Panel
[edit] Week 9 - February 29, 2008
2nd Meeting with local Church Pastor Had a meeting Wednesday night with the Pastor and the person responsible for their current website. The meeting this time was not as promising as before. To keep a long summary short, they wanted to keep what they already have and take only parts of what I'm building. Unfortunately I'm not very inclined to reduce the scope of what I'm working on to fit into their goals, so as a result I may not be converting my site under them and will continue my work as originally planned. I will continue to build my site independently unless something changes.
More updates to come.
Bean issue
I'm having issues with the web server loading my new bean. It seems the jsp version the site is running is an older version compared to my local env. I haven't spent the time to load Java 1.4 on my laptop to compile and to see whether that will fix my issues. So for the time being my latest work will only reside on my laptop.
Here's the error...
exception javax.servlet.ServletException: Bad version number in .class file org.apache.jasper.servlet.JspServlet.service(JspServlet.java:244) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) sun.reflect.GeneratedMethodAccessor143.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:585) org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:239) java.security.AccessController.doPrivileged(Native Method) javax.security.auth.Subject.doAsPrivileged(Subject.java:517) org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:266) org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
Accomplishments
I seemed to have bitten off more than I could chew this week by diving into JavaMail and GoogleMap APIs this week. Details listed below.
- GoogleMaps
I've finally implemented the googlemap api into my code. The the website will now query the database for the addresses of organizations and display its location via maps using the google map interface.
The javascript is listed below...
<c:if test='${param.function eq "map"}'>
<sql:query var="result4map">
SELECT * FROM domaininfo WHERE domain = ?
<sql:param value='${param.domain}' />
</sql:query>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAGvNjce_TA7-OnQIyl-A8ZxR1TkqDXZFY2-ARxcR5xiLGejUaDhTNs8hI-H8gjn9zcHZA6Q0xmsIpgQ"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var geocoder;
var map;
<c:forEach items="${result4map.rowsByIndex}" var="row" varStatus="status">
var domain = "${row[1]}";
var address = "${row[2]}, ${row[3]} ${row[4]}";
</c:forEach>
// On page load, call this function
function load()
{
// Create new map object
map = new GMap2(document.getElementById("map"));
// Create new geocoding object
geocoder = new GClientGeocoder();
// Retrieve location information, pass it to addToMap()
geocoder.getLocations(address, addToMap);
}
// This function adds the point to the map
function addToMap(response)
{
// Retrieve the object
place = response.Placemark[0];
// Retrieve the latitude and longitude
point = new GLatLng(place.Point.coordinates[1],
place.Point.coordinates[0]);
// Center the map on this point
map.setCenter(point, 13);
// Create a marker
marker = new GMarker(point);
// Add the marker to map
map.addOverlay(marker);
// Add address information to marker
marker.openInfoWindowHtml(domain + "
" + place.address);
}
//]]>
</script>
</c:if>
A good reference page for googlemap is here http://mapki.com/wiki/Main_Page
- JavaMail
Javamail (aka mass spam mailing now works). I started off by taking code from stardeveloper.com which is listed below. However the example did not include authentication nor SSL encryption which I had to add.
package com.stardeveloper.bean.test;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;
public final class MailerBean extends Object implements Serializable {
/* Bean Properties */
private String to = null;
private String from = null;
private String subject = null;
private String message = null;
public static Properties props = null;
public static Session session = null;
static {
/* Setting Properties for STMP host */
props = System.getProperties();
props.put("mail.smtp.host", "mail.yourisp.com");
session = Session.getDefaultInstance(props, null);
}
/* Setter Methods */
public void setTo(String to) {
this.to = to;
}
public void setFrom(String from) {
this.from = from;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setMessage(String message) {
this.message = message;
}
/* Sends Email */
public void sendMail() throws Exception {
if(!this.everythingIsSet())
throw new Exception("Could not send email.");
try {
MimeMessage message = new MimeMessage(session);
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(this.to));
message.setFrom(new InternetAddress(this.from));
message.setSubject(this.subject);
message.setText(this.message);
Transport.send(message);
} catch (MessagingException e) {
throw new Exception(e.getMessage());
}
}
/* Checks whether all properties have been set or not */
private boolean everythingIsSet() {
if((this.to == null) || (this.from == null) ||
(this.subject == null) || (this.message == null))
return false;
if((this.to.indexOf("@") == -1) ||
(this.to.indexOf(".") == -1))
return false;
if((this.from.indexOf("@") == -1) ||
(this.from.indexOf(".") == -1))
return false;
return true;
}
}
Here is my final code with authentication and SSL encryption added.
//Example taken from /www.stardeveloper.com/
//Authenication and SSL added
//02.25.08
package cs320.stu01;
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;
import java.security.*;
public final class MailerBean extends Object implements Serializable {
/* Bean Properties */
private String to = "senspeed@gmail.com";
private String from = "senspeed@gmail.com";
private String subject = "test MailBean";
private String message = "test mailbean body";
public static Properties props = null;
public static Session session = null;
static {
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
Security.addProvider( new com.sun.net.ssl.internal.ssl.Provider());
Authenticator auth = new SMTPAuthenticator();
/* Setting Properties for STMP host */
props = System.getProperties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.connectiontimeout","10000");
props.put("mail.smtp.timeout","10000");
props.put("mail.smtp.auth", "true");
props.setProperty( "mail.smtp.socketFactory.class", SSL_FACTORY);
session = Session.getDefaultInstance(props, auth);
session.setDebug(true);
}
/* Sends Email */
public void sendMail() throws Exception {
if(!this.everythingIsSet())
throw new Exception("Could not send email.");
try {
MimeMessage message = new MimeMessage(session);
message.setRecipient(Message.RecipientType.TO,
new InternetAddress(this.to));
message.setFrom(new InternetAddress(this.from));
message.setSubject(this.subject);
message.setText(this.message);
Transport.send(message);
} catch (MessagingException e) {
throw new Exception(e.getMessage());
}
}
/* Checks whether all properties have been set or not */
private boolean everythingIsSet() {
if((this.to == null) || (this.from == null) ||
(this.subject == null) || (this.message == null))
return false;
if((this.to.indexOf("@") == -1) ||
(this.to.indexOf(".") == -1))
return false;
if((this.from.indexOf("@") == -1) ||
(this.from.indexOf(".") == -1))
return false;
return true;
}
/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
private static class SMTPAuthenticator extends javax.mail.Authenticator
{
public PasswordAuthentication getPasswordAuthentication()
{
String username = "senspeed";
String password = "?????????";
return new PasswordAuthentication(username, password);
}
}
}
[edit] Week 10 - March 7, 2008
Accomplishments
- Fixed many small bugs that had cropped up with my numerous database structure changes I performed recently
- Did a lot of work with Javamail
- Email notification will not be sent to the admin when a new organization is registered
- Once organization is approved by the admin, email will be sent to the org supervisor notifying that their org is now ready for use.
- When a user registers with the organization, an email will be sent to all supervisors of the organization.
- When the supervisor for an organization posts news, all members will receive the news posting.
- When the supervisor creates a new event, all members will receive an email of its creation.
Sample code...
<%--Email admin of org registration--%>
<sql:query var="adminresult">
SELECT * FROM userinfo WHERE priv = "admin"
</sql:query>
<c:forEach items="${adminresult.rowsByIndex}" var="row" varStatus="status">
<jsp:setProperty name="mailer" property="to" value="${row[5]}"/>
<jsp:setProperty name="mailer" property="subject" value="New Organization (${param.domain}) has been registered"/>
<jsp:setProperty name="mailer" property="message" value="
Registered by: ${sessionScope.username}
On: ${blog.blogtime}
Domain: ${param.domain}
Address: ${param.street}
${param.city}, ${param.state}, ${param.zip}
Activate organization --> www.givesomehappy.com/login.jsp
"/>
<% mailer.sendMail(); %>
</c:forEach>
- Chinese font problem analysis and solution.
What's next?
- Finish Final Report
- Start user Profile page
- File upload
- Picture photo album
- Flash movie player (ala youtube?)
[edit] Final - March 14, 2008
- add donate stuff objectives
- add potential user discussion results
- add short description for using this website as opposed to their own.
Brief project description A web application that allows for non-profit organizations to network together and share resources. The website will also serve as a directory where people interested in non-profit work can visit, explore, and possibly find an organization which they would like to participate in.
This website could also serve as an organization's own site if they do not have their own. This is useful for small organizations are not able to invest in their own site. If organizations do have their own site, it will be up to them to decide how to integrate the two together. They can use this site purely as a directory listing for others (ala google) to link to their own.
Anticipated users
- Non-profit organizations
- Users interested in and searching for non-profit work
Main conceptual (i.e., user-level) objects
- Users: Created by users.
- Organization: Created by users and exist as an object for other users to potentially join.
- Events: Created by organizations and exist as an object for other organizations to potentially join.
Primary conceptual (i.e., user-level) operations
- User Operations
- Provide the ability to register/modify/join organizations
- Provide the ability to register/modify/join Events (as org supervisor)
- Provide the ability to register/modify their own profile
- Organization Operations
- Provide ability to post details about organization
- Provide ability to post news
- Provide ability the to list members directory
- Provide ability to automatically email all members with updates to the org
- Provide ability to post photos
- Event Operations
- Ability to post itself onto master calendar
- Ability to post for help wanted / Stuff needed
- Ability to email all attached organizations with updates to the event
- Provide ability to post photos
- HappyTrader
- Provide ability for donors to create/post/modify items available for donation
- Search Capability
- Provide ability to search for organizations
- Provide ability to search for events
- Provide ability to search for users
- provide ability to search for items available for donation
Why I am interested in this project
I have witnessed many small non-profits organzations operating in isolated local environments. Because of this, the outreach for funding, manpower, and general resources are limited due to the lack of visiblity. It has always been my intent to create a website in which small organizations can have a forum to collaborate and possibly get the word out about their cause, however I have never worked up enough motivation to take on the amount of work needed for designing and writing a feasible site. However, because we have had free range to persue the types of projects we would like to build, this then has given me the opportunity to knock out two birds with one stone and to finally sit down and invest in the time to complete such a project.
Status
I have done somewhat extensive work on the website already. The site is currently registered and running on the www. The work I have done includes multiple jsp pages as well as a few bean classes. I have already implemented a fair portion of the functions I had plan for the site, however testing has been limited and for sure there will be many updates to polish the code. One of the remaining functions I have yet to implement is the media file upload function which I hope to complete by 491b.
This project is intended for real useage, so as a result I have been meeting with local churches whom are interested in using the site. My discussions with a particular local church has resulted in us agreeing to fully integrate this site into their own. this process has already started and will be ongoing for the coming weeks!

