Hi! I'm a newbie at java and I need help with an inventory program for a school project. I planned the inventory program for the user to keep track of their inventory in MMORPGs. I want the user to be able to add, delete, update, sort the items, also be able to view the items that's currently in the program, and a log of whenever an item has been added, deleted, or updated. I understand my program is extremely messy, so any tips on making it more efficient would be appreciated. I'm having trouble figuring out how to update the price and amount sold for an item in the arraylist. Also every time I try to add an item, it always skips over adding notes, and when I try to sort, it always stops working, how can I fix these problems? Lastly, how can I log all the actions done to the items? Thank you in advance! If you could refer me to any references I should read up to understand java better, I would really appreciate it. I haven't started on working on the output yet, the teacher has given us a template but I have yet to work with it since I wanted to figure how to log the actions done first.

import java.util.*;

public class Inventory{
	public static void main(String[] args){ //main class
		ItemList il = new ItemList();
		Scanner kb = new Scanner(System.in);
		char answer = 'w';
		System.out.println("Welcome to the Inventory Program");
		do{
		System.out.println("Do you wish to add an item, update an item, delete an item");
		System.out.println("sort item, view logs, print log history, or quit?");
			answer = kb.nextLine().toLowerCase().charAt(0);
			
			if(answer == 'a'){ //add item
				il.addItem();
				System.out.println();
			}
			else if(answer == 'u'){ //update item
				il.update();
				System.out.println();
			}
			else if(answer == 'd'){ //delete item
				il.deleteItem();
				System.out.println();
			}
			else if(answer == 's'){ //sort item
				il.sortBy();
				System.out.println();
			}
			else if(answer == 'v'){	//view logs
				System.out.println(il);
				System.out.println("Total Profit:" + il.calcTotp());
				System.out.println();
			}
			else if(answer == 'p'){	//print log history
				//output
				System.out.println();
			}
		}		
		while (answer != 'q'); //quit
		System.out.println("Good bye!");
	}
}
import java.util.Scanner;
import java.util.ArrayList;

public class ItemList extends ArrayList<Item>{        //Array
//ArrayList<Item> Output = new ArrayList<Item>();
Scanner kb= new Scanner(System.in);
String sort;
double totP;
	public void addItem(){ //creates new item and adds to array
			String iname;
			int iquantity; 
			double iprice; 
			int isold;
			String inotes;
			String ilocation;
			String itype;
			
			System.out.println("Type name:");
			iname = kb.nextLine();
			System.out.println();
				
			System.out.println("Type quantity:");
			iquantity = kb.nextInt();
			System.out.println();
				
			System.out.println("Type price:");
			iprice = kb.nextInt();
			System.out.println();
			
			System.out.println("Type amount sold:");
			isold = kb.nextInt();
			System.out.println();
			
			System.out.println("Enter notes:");
			inotes = kb.nextLine();
			System.out.println();
			
			System.out.println("Enter location:");
			ilocation = kb.nextLine();
			System.out.println();

			System.out.println("Enter type:");
			itype = kb.nextLine();
			System.out.println();
			
			Item i = new Item(iname, iquantity, iprice, isold, inotes, itype, ilocation);
			add(i);
			Output.add(i);
		}

public void deleteItem (){  //delete an item from the arraylist
		System.out.println("Type name to delete.");
			String deleteName = kb.nextLine();
			int input = indexOf(deleteName);
			remove(input);
}

public double calcTotp(){  //calculate the total profit from all of the items in list
	totP = 0;
	for(int i =0; i < size(); i++){
		totP= totP + get(i).getProfit();
	}
	return totP;
}

public void update(){ //user inputs sold and price for a certain item, updates both variables
System.out.println("Which item would you like to update?");
	String name = kb.nextLine();
	int input = indexOf(name);
	//get(i).
	
/*System.out.println("Please enter the updated price:");
	iprice = kb.nextInt();
	set(input, iprice);
	System.out.println();
	
System.out.println("Please enter the updated sold amount:");
	isold = kb.nextInt();
	System.out.println(); */
}


public void sortBy(){ //sort the items in list
	System.out.println("How would you like to sort it? (location, price, or type)");
		char g = 'g';
		g = kb.nextLine().toLowerCase().charAt(0);	
		
    if (g == 'l'){ //sort location by alphabetical order
    ArrayList<Item> temp = new ArrayList<Item>();
		while(size()>0){
			int currentIndex= 0;
			String first = get(0).getName();
			for(int i =0; i < size(); i++){
				if (get(i).getName().compareTo(first)<0){
					currentIndex = i;
					temp.add(get(i));
					remove(i);
				}	
			}		
		}
		addAll(temp);
	}
	
    else if (g == 'p'){ //sort price lowest to highest
		ArrayList<Item> temp = new ArrayList<Item>();
		while(size()>0){
			int currentIndex= 0;
			double lowestPrice = get(0).getPrice();
			for(int i =0; i < size(); i++){
				if (get(i).getPrice() <lowestPrice){
					currentIndex = i;
					temp.add(get(i));
					remove(i);
				}	
			}		
		}
		addAll(temp);
	}
	
	
	
    else if (g == 't'){ //sort type by alphabetical order
        ArrayList<Item> temp = new ArrayList<Item>();
		while(size()>0){
			int currentIndex= 0;
			String first = get(0).getName();
			for(int i =0; i < size(); i++){
				if (get(i).getName().compareTo(first)<0){
					currentIndex = i;
					temp.add(get(i));
					remove(i);
				}	
			}		
		}
		addAll(temp);
	}
}

}
import java.util.Scanner;
import java.util.ArrayList;
import java.lang.String;

public class Item{
		String name;
		int quantity;
		double price;
		int sold;
		double profit;
		String notes;
		String location;
		String type;
	
	Scanner kb= new Scanner(System.in);
		//creates item using information inputed from ItemList
	public Item(String iname, int iquantity, double iprice, int isold, String inotes, String itype, String ilocation){
		name = iname;
		profit = calcProfit(isold, iquantity, iprice);
		price = iprice;
		sold = isold;
		notes = inotes;
		type = itype;
		location = ilocation;
	}
	
	public String toString(){ //what output looks like when you view list
		return name+ ", " +quantity+ ", " +price+ ", " +sold+ ", " +notes+ ", " +type+ ", " +location + "\n";
	}
	
	public void setName(String iname){
		name = iname;
		//iteminfo.add(name);
	}

	public String getName(){
		return name;
	}

	public void setQuantity(int iquantity){
		quantity = iquantity;
		//iteminfo.add(quantity);
	}

	public int getQuantity(){
		return quantity;
	}

	public void setPrice(int iprice){
		price = iprice;
		//iteminfo.add(price);
	}

	public double getPrice(){
		return price;
	}

	public void setSold(int isold){
		sold = isold;
		//iteminfo.add(sold);
	}

	public int getSold(){
		return sold;
	}

	public void setProfit(int iprofit){
		profit = iprofit;
		//iteminfo.add(profit);
	}

	public double getProfit(){
		return profit;
	}

	public void setNotes(String inotes){
		notes = inotes;
		//iteminfo.add(notes);
	}

	public String getNotes(){
		return notes;
	}

	public void setLocation(String ilocation){
		location = ilocation;
		//iteminfo.add(location);
	}

	public String getLocation(){
		return location;
	}

	public void setType(String itype){
		type = itype;
		//iteminfo.add(type);
	}

	public String getType(){
		return type;
	}
	//calculates profit
	//if user sells something, price = price sold for, sold = amount sold
	//if user buys something, price = -, sold = amount bought
	//if user gives something away for free, price = 0, sold = -(amount given away)
	//if user finds something, price = 0, sold = amount found
	public double calcProfit(int isold, int iquantity, double iprice){
		if (iprice < 0){
			profit = (iprice*isold);
			iquantity = (isold + iquantity);
			}
		else{
			if (iprice ==0){
				if (isold < 0){
					iquantity = (iquantity + isold);
				}
				else{
					iquantity = (quantity - isold);
				}
			}
			else{
				profit = (iprice*isold);
				iquantity = (iquantity-isold);
			}
		}
		return profit;
	}
}

fixed code:

import java.util.Scanner;
import java.util.ArrayList;

public class ItemList extends ArrayList<Item>{        //Array
    ArrayList<Item> Output = new ArrayList<Item>();
    Scanner kb= new Scanner(System.in);
    String sort;
    double totP;
    public void addItem(){ //creates new item and adds to array
        String iname;
        int iquantity; 
        double iprice; 
        int isold;
        String inotes;
        String ilocation;
        String itype;

        System.out.println("Type name:");
        iname = kb.nextLine();
        System.out.println();

        System.out.println("Type quantity:");
        iquantity = Integer.parseInt(kb.nextLine());
        System.out.println();

        System.out.println("Type price:");
        iprice = Integer.parseInt(kb.nextLine());
        System.out.println();

        System.out.println("Type amount sold:");
        isold = Integer.parseInt(kb.nextLine());
        System.out.println();

        System.out.println("Enter notes:");
        inotes = kb.nextLine();
        System.out.println();

        System.out.println("Enter location:");
        ilocation = kb.nextLine();
        System.out.println();

        System.out.println("Enter type:");
        itype = kb.nextLine();
        System.out.println();

        Item i = new Item(iname, iquantity, iprice, isold, inotes, itype, ilocation);
        add(i);
        Output.add(i);
    }

    public void deleteItem (){  //delete an item from the arraylist
        System.out.println("Type name to delete.");
        String deleteName = kb.nextLine();
        int input = indexOf(deleteName);
        remove(input);
    }

    public double calcTotp(){  //calculate the total profit from all of the items in list
        totP = 0;
        for(int i =0; i < size(); i++){
            totP= totP + get(i).getProfit();
        }
        return totP;
    }

    public void update(){ //user inputs sold and price for a certain item, updates both variables
        System.out.println("Which item would you like to update?");
        String name = kb.nextLine();
        int input = indexOf(name);
        //get(i).

        /*System.out.println("Please enter the updated price:");
        iprice = kb.nextInt();
        set(input, iprice);
        System.out.println();

        System.out.println("Please enter the updated sold amount:");
        isold = kb.nextInt();
        System.out.println(); */
    }

    public void sortBy(){ //sort the items in list
        System.out.println("How would you like to sort it? (location, price, or type)");
        char g = 'g';
        g = kb.nextLine().toLowerCase().charAt(0);	

        if (g == 'l'){ //sort location by alphabetical order
            ArrayList<Item> temp = new ArrayList<Item>();
            while(size()>0){
                int currentIndex= 0;
                String first = get(0).getName();
                for(int i =0; i < size(); i++){
                    if (get(i).getName().compareTo(first)<0){
                        currentIndex = i;
                        temp.add(get(i));
                        remove(i);
                    }	
                }		
            }
            addAll(temp);
        }

        else if (g == 'p'){ //sort price lowest to highest
            ArrayList<Item> temp = new ArrayList<Item>();
            while(size()>0){
                int currentIndex= 0;
                double lowestPrice = get(0).getPrice();
                for(int i =0; i < size(); i++){
                    if (get(i).getPrice() <lowestPrice){
                        currentIndex = i;
                        temp.add(get(i));
                        remove(i);
                    }	
                }		
            }
            addAll(temp);
        }

	
        else if (g == 't'){ //sort type by alphabetical order
            ArrayList<Item> temp = new ArrayList<Item>();
            while(size()>0){
                int currentIndex= 0;
                String first = get(0).getName();
                for(int i =0; i < size(); i++){
                    if (get(i).getName().compareTo(first)<0){
                        currentIndex = i;
                        temp.add(get(i));
                        remove(i);
                    }	
                }		
            }
            addAll(temp);
        }
    }

}

reason:
the next guy who will quote me will explain ;)

also note if I don't enter an integer than the program will break and throw an exception.... so its better to use try catch and a while loop around the whole thing...

also I used bluej for such projects as they are easier to visualize and debug as a newbie....

here is how ur program looks on my bluej screen
http://i42.tinypic.com/1t0izb.png

i am sure other guys will help you more on this

Thank you for your help Jaggs. I'll look into using bluej :) But I'm still confused what the difference between using Integer.parseInt and simply using nextInt.

Thank you for those links, they were very informative. I'm having trouble with the output/input class. (I used the template my teacher gave us for output and input) When I try to compile I get this error:
Output.java:40: cannot find symbol
symbol: method add(java.lang.String)
location: class java.util.ArrayList<Item>

Output. java:84: cannot find symbol
symbol :method get(int)
location: class Output

Is it because it is an arraylist of items? Also how can I make it so it holds two zeros after the decimal (for the money)? And how to make the created file a .txt file?

import java.util.*;

public class Inventory{
	public static void main(String[] args){
		ItemList il = new ItemList();
		Output ot = new Output();
		Scanner kb = new Scanner(System.in);
		char answer = 'w';
		System.out.println("Welcome to the Inventory Program");
		System.out.println("Do you have a previously saved file?");
		answer = kb.nextLine().toLowerCase().charAt(0);
		if(answer == 'y'){
			ot.Import();
		}
		else if(answer == 'n'){
			ot.createFile();
		}
		else{
		System.out.println("Oops please say yes or no");
		}
		
		do{
		System.out.println("Do you wish to add an item, update an item, delete an item");
		System.out.println("sort item, view logs, print log history, or quit?");
			answer = kb.nextLine().toLowerCase().charAt(0);
			
			if(answer == 'a'){ //add item
				il.addItem();
				System.out.println();
			}
			else if(answer == 'u'){ //update item
				il.update();
				System.out.println();
			}
			else if(answer == 'd'){ //delete item
				il.deleteItem();
				System.out.println();
			}
			else if(answer == 's'){ //sort item
				il.sortBy();
				System.out.println();
			}
			else if(answer == 'v'){	//view logs
				    for (Item s : il) {    
					System.out.print(s);    
					}    
				System.out.println("Total Profit:" + il.calcTotp());
				System.out.println();
			}
			else if(answer == 'p'){	//print log history
				ot.print();
				System.out.println();
			}
			else if (answer == 'q'){
				//System.out.println("Error. Please choose one of the options.");
			}
			else{
				System.out.println("Error. Please choose one of the options.");
			}
		}		
		while (answer != 'q'); //quit
		System.out.println("Good bye!");
	}
}
import java.io.*;  //Contains File and PrintWriter
import java.util.Scanner;
import java.util.*;
import java.lang.String;

public class Output{
	//public static void main(String[] args){
		ArrayList<Item> list = new ArrayList<Item>();
		//from user, name of file to read
		String fileName; 
		
		//Scanner to read from keyboard
		Scanner keyboardScanner, fileScanner;
		
		//PrintWriter to write to file
		PrintWriter pw;
		
		//File object to be created
		File f; 
		
		public void Import(){ //puts info into an arraylist of items
		//Get file name from user
		keyboardScanner = new Scanner(System.in);
		System.out.println("Enter the name of the file to open:");
		fileName = keyboardScanner.next();
		
		//Create a new file object with given name
		f = new File(fileName);
		
		//Must be in try loop because if file does not exist,
		//first line will throw FileNotFoundException
		try{
			fileScanner = new Scanner(f);
			
			//As long as there is another line to read, print
			//whole line to screen.  If you were trying to get 
			//individual words/numbers/etc, use .next instead
			//of .nextLine
			while(fileScanner.hasNext()){
				list.add(fileScanner.next());
			}
		}catch(FileNotFoundException e){
			//If exception is thrown, exit gracefully
			System.out.println("Could not find file "+fileName);
			System.exit(1);
			}	
		}
		
		public void createFile(){ //creates new file to store the arraylist
		//Get file name from user
		keyboardScanner = new Scanner(System.in);
		System.out.println("Enter the name of the file to create:");
		fileName = keyboardScanner.next();
		
		//consume nextLine character
		keyboardScanner.nextLine();
		
		//Create a new file object with given name
		f = new File(fileName);
	
		//Check to see if file already exists
			if(f.exists()){
				System.out.println("File already exists - overwrite?");
				char response = keyboardScanner.next().toLowerCase().charAt(0);
				if(response != 'y')
					System.exit(0);
				keyboardScanner.nextLine();
			}
		}
		public void listSort(){ //sort the arraylist items by alphabetical order
			 ArrayList<Item> temp = new ArrayList<Item>();
			while(list.size()>0){
				System.out.println(list.size());
				int currentIndex= 0;
				String first = list.get(0).getName();
				for(int i =1; i < list.size(); i++){
					if (list.get(i).getName().compareToIgnoreCase(first)<=0){
						currentIndex= i;
						first = list.get(currentIndex).getName();
						//temp.add(get(i));
						//remove(i);
					}	
				}
				temp.add(get(currentIndex));
				list.remove(currentIndex);
			}
			list.addAll(temp);
			System.out.println("Done.");
		}
		
		public void print(){ //print the arraylist into text file
		try{
			pw = new PrintWriter(f);
			String nextLine;
			//do{
				//System.out.println("Type next line, or <enter> to quit");
				//get line from user;
				//nextLine = keyboardScanner.nextLine();
				//write line to file;
				//listSort();
				for (int i = 0; i< list.size(); i++){
				pw.println(list.get(i));
				}
				//pw.println(nextLine); 
			//}while(nextLine.length()>0);
			//Finish printing to the file
			System.out.println("Done.");
			pw.flush();
			
			//Close the output stream
			pw.close();
		
		}
		catch(Exception e){
			//If exception is thrown, exit
			System.out.println("Error encountered :( ");
			System.exit(1);
		}
	}
}
import java.util.Scanner;
import java.util.ArrayList;

public class ItemList extends ArrayList<Item>{        //Arraylist of items
Scanner kb= new Scanner(System.in);
String sort;
double totP;
	public void addItem(){ //creates new item and adds to array
			String iname;
			int iquantity; 
			double iprice; 
			int isold;
			String inotes;
			String ilocation;
			String itype;
			
			System.out.println("Type name:");
			iname = kb.nextLine();
			System.out.println();
				
			System.out.println("Type quantity:");
			iquantity = Integer.parseInt(kb.nextLine());
			System.out.println();
				
			System.out.println("Type price:");
			iprice = Integer.parseInt(kb.nextLine());
			System.out.println();
			
			System.out.println("Type amount sold:");
			isold = Integer.parseInt(kb.nextLine());
			System.out.println();
			
			System.out.println("Enter notes:");
			inotes = kb.nextLine();
			System.out.println();
			
			System.out.println("Enter location:");
			ilocation = kb.nextLine();
			System.out.println();

			System.out.println("Enter type:");
			itype = kb.nextLine();
			System.out.println();
			
			Item i = new Item(iname, iquantity, iprice, isold, inotes, itype, ilocation);
			add(i);
		}

public void deleteItem (){  //delete an item from the arraylist
		System.out.println("Type name to delete.");
			String name = kb.nextLine();
			int i = 0;
			for (i = 0; i<size(); i++){
				if (get(i).getName().compareToIgnoreCase(name)==0){
					break;
				}
			}
			int input = i;
			remove(input);
}

public double calcTotp(){  //calculate the total profit from all of the items in list
	totP = 0;
	for(int i =0; i < size(); i++){
		totP= totP + get(i).getProfit();
	}
	return totP;
}

public void update(){ //user inputs sold and price for a certain item, updates both variables
System.out.println("Which item would you like to update?");
	String name = kb.nextLine(); //use loop to find the item, refer to document index ch.12
		int i = 0;
			for (i = 0; i<size(); i++){
				if (get(i).getName().compareToIgnoreCase(name)==0){
					break;
				}
			}
			int input = i;
	if(input>=0){
		get(input).updateItem();
	}
	else{
		System.out.println("Item not found");
	}
}


public void sortBy(){ //sort the items in list
	System.out.println("How would you like to sort it? (location, price, or type)");
		char g = 'g';
		g = kb.nextLine().toLowerCase().charAt(0);	
		
    if (g == 'l'){ //sort location by alphabetical order
	System.out.println("You have chosen to sort by location.");
    ArrayList<Item> temp = new ArrayList<Item>();
		while(size()>0){
			System.out.println(size());
			int currentIndex= 0;
			String first = get(0).getLocation();
			for(int i =1; i < size(); i++){
				if (get(i).getLocation().compareToIgnoreCase(first)<=0){
					currentIndex= i;
					first = get(currentIndex).getLocation();
					//temp.add(get(i));
					//remove(i);
				}	
			}
			temp.add(get(currentIndex));
			remove(currentIndex);
		}
		addAll(temp);
		System.out.println("Done.");
	}
	
    else if (g == 'p'){ //sort price lowest to highest
	System.out.println("You have chosen to sort by last updated price.");
		ArrayList<Item> temp = new ArrayList<Item>();
		System.out.println(size());
		while(size()>0){
			int currentIndex= 0;
			double lowestPrice = get(0).getPrice();
			for(int i =1; i < size(); i++){
				if (get(i).getPrice() <lowestPrice){
					currentIndex = i;
					lowestPrice = get(currentIndex).getPrice();
					//temp.add(get(i));
					//remove(i);
				}	
			}	
			temp.add(get(currentIndex));
			remove(currentIndex);
		}
		addAll(temp);
		System.out.println("Done.");
	}
	
	
	
    else if (g == 't'){ //sort type by alphabetical order
	System.out.println("You have chosen to sort by type.");
        ArrayList<Item> temp = new ArrayList<Item>();
		while(size()>0){
			System.out.println(size());
			int currentIndex= 0;
			String first = get(0).getType();
			for(int i =1; i < size(); i++){
				if (get(i).getType().compareToIgnoreCase(first)<=0){
					currentIndex= i;
					first = get(currentIndex).getType();
					//temp.add(get(i));
					//remove(i);
				}	
			}
			temp.add(get(currentIndex));
			remove(currentIndex);
		}
		addAll(temp);
		System.out.println("Done.");
	}
}
}
import java.util.Scanner;
import java.util.ArrayList;
import java.lang.String;

public class Item{
		String name;
		int quantity;
		double price;
		int sold;
		double profit;
		String notes;
		String location;
		String type;
	
	Scanner kb= new Scanner(System.in);
		//creates item using information inputed from ItemList
	public Item(String iname, int iquantity, double iprice, int isold, String inotes, String itype, String ilocation){
		name = iname;
		profit = calcProfit(isold, iquantity, iprice);
		quantity = iquantity;
		price = iprice;
		sold = isold;
		quantity = quantity-sold;
		notes = inotes;
		type = itype;
		location = ilocation;
	}
	
	public String toString(){ //what output looks like when you view list
		return "Name:"+name+ "  Quantity:" +quantity+ "  Price:" +price+ "\n Sold:"+sold+ "  Profit:"+profit+"  Notes: " +notes+ "  Type:" +type+ "  Location:" +location + "\n";
	}

	public void updateItem(){
	try{
	System.out.println("Please enter the updated quantity:");
	int iquantity = kb.nextInt();
	quantity=iquantity + quantity;
	System.out.println("Please enter the updated price:");
	double price = Integer.parseInt(kb.nextLine());
	System.out.println("Please enter the updated sold amount:");
	int isold = kb.nextInt();
	sold = isold + sold;
	}
	catch(NumberFormatException nb){
	System.out.println("Not a number");
	}
	profit = (price*sold);
	}
	
	public void setName(String iname){
		name = iname;
		//iteminfo.add(name);
	}

	public String getName(){
		return name;
	}

	public void setQuantity(int iquantity){
		quantity = iquantity;
		//iteminfo.add(quantity);
	}

	public int getQuantity(){
		return quantity;
	}

	public void setPrice(int iprice){
		price = iprice;
		//iteminfo.add(price);
	}

	public double getPrice(){
		return price;
	}

	public void setSold(int isold){
		sold = isold;
		//iteminfo.add(sold);
	}

	public int getSold(){
		return sold;
	}

	public void setProfit(int iprofit){
		profit = iprofit;
		//iteminfo.add(profit);
	}

	public double getProfit(){
		return profit;
	}

	public void setNotes(String inotes){
		notes = inotes;
		//iteminfo.add(notes);
	}

	public String getNotes(){
		return notes;
	}

	public void setLocation(String ilocation){
		location = ilocation;
		//iteminfo.add(location);
	}

	public String getLocation(){
		return location;
	}

	public void setType(String itype){
		type = itype;
		//iteminfo.add(type);
	}

	public String getType(){
		return type;
	}
	//calculates profit
	//if user sells something, price = price sold for, sold = amount sold
	//if user buys something, price = -, sold = amount bought
	//if user gives something away for free, price = 0, sold = -(amount given away)
	//if user finds something, price = 0, sold = amount found
	public double calcProfit(int isold, int iquantity, double iprice){
		if (iprice < 0){
			profit = (iprice*isold);
			iquantity = (isold + iquantity);
			}
		else{
			if (iprice ==0){
				if (isold < 0){
					iquantity = (iquantity + isold);
				}
				else{
					iquantity = (quantity - isold);
				}
			}
			else{
				profit = (iprice*isold);
				iquantity = (iquantity-isold);
			}
		}
		return profit;
	}
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.